运算符不是 return 预期结果

operator not return expected result

平均值和中值计算器采用三个输入值,return向用户提供平均值和中值。中位数是 return 预期结果,因此我没有在下面包含它。问题是平均值太远了。

我已经 console.log 这些数字以确保它们在执行计算之前没有被操纵,但事实并非如此。我已经 console.log 将在 console.log 中输入的数字进行并排比较,例如

console.log((34 + 30 + 11)/ 3) //return 25

和上面的 returns 是正确的,但是输入字段中输入的值 return 114337.

 console.log((inputValue.val1 + inputValue.val2 + inputValue.val3) / 3) //return 114337 which is wrong

我已经多次查看我的代码,但没有看到任何东西,所以我决定 post 在这里多看几眼,希望能找到解决方案。

 const [min] = useState(0);
 const [CalcAvg, setCalcAvg] = useState(0);

 const [inputValue, setInputValue] = useState({
   val1: 0,
   val2: 0,
   val3: 0,
 });

 const handleChange = event => {
   const {name, value} = event.target;
   setInputValue(prev => {
     return {
       ...prev,
       [name]: value
     }
   })

 }

 const average = () => {
   // console.log("val1 " + inputValue.val1)
   // console.log("val2 " + inputValue.val2);
   // console.log("val3 " + inputValue.val3);

   /*** THE ISSUE IS HERE ****/

   console.log((inputValue.val1 + inputValue.val2 + inputValue.val3) / 3);

   //  setCalcAvg(avg);
 }


 const handleSubmit = event => {
   event.preventDefault()
   average()
   median()
   /*** THIS RETURNS THE CORRECT VALUE ****/
       console.log((34 + 30 + 11) / 3);

 }

 return (
   <main>
     <div>
       <form onSubmit={handleSubmit} className="form">
         <input
           name="val1"
           value={inputValue.val1}
           type="number"
           min={min}
           onChange={handleChange}
           required
         />
         <input
           name="val2"
           value={inputValue.val2}
           type="number"
           min={min}
           onChange={handleChange}
           required
         />
         <input
           name="val3"
           value={inputValue.val3}
           type="number"
           min={min}
           onChange={handleChange}
           required
         />
         <button onSubmit={handleSubmit} type="submit">
           Calculate
         </button>
       </form>
       <Results average={CalcAvg} />
     </div>
   </main>
 );```

它将您的值视为字符串而不是整数。所以它得到了正确的响应,因为它将 343011 除以 3。如果您使用 parseInt(inputValue.val1, 10) 将这些字符串强制转换为整数,您将获得 25 的预期结果。因为你没有 post 你的中值函数,我不能告诉你为什么它有效而这个无效。

您还可以在 handleChange 函数中应用 parseInt,方法是使用

[name]: parseInt(value, 10)

console.log(('34'+'30'+'11')/3)
console.log((parseInt('34', 10) + parseInt('30', 10) + parseInt('11', 10))/3)