Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:不能在小数点后输入零_Javascript_Reactjs_Numbers - Fatal编程技术网

Javascript:不能在小数点后输入零

Javascript:不能在小数点后输入零,javascript,reactjs,numbers,Javascript,Reactjs,Numbers,基本上,我正在开发一个计算器应用程序,并注意到我的程序中存在以下错误: 每当我尝试在浮点数的小数点后输入任何零,它都不允许我这样做 我假设代码中的问题在以下函数中的某个地方,但不确定到底是什么地方出了问题 function handleChange() { const { value } = event.target // if (isCalculated) { // handleDelete() //} if (value === "." &

基本上,我正在开发一个计算器应用程序,并注意到我的程序中存在以下错误: 每当我尝试在浮点数的小数点后输入任何零,它都不允许我这样做

我假设代码中的问题在以下函数中的某个地方,但不确定到底是什么地方出了问题

function handleChange() {
  const { value } = event.target

  // if (isCalculated) {
  //  handleDelete()
  //}

  if (value === "." && !displayNum.toString().includes(".")) {
    setDisplayNum(prevValue => prevValue.toString().concat("."))
  } else if (regex.test(displayNum)) {
    setDisplayNum(value)
  } else {
    setDisplayNum(prevValue => parseFloat(prevValue.toString().concat(value)))
  }
}
传递的值可以是0-9和之间的数字。正则表达式为regex=/\+\124;-\*\//

这也是我的建议

p.S.setDisplayNum只是设置React state钩子值来跟踪更改。

这就是parseFloat的工作方式:

这就是parseFloat的工作方式:

parseFloat去除小数点后的尾随零,您可以使用toFixed计算小数点后的数字

功能手柄更换{ 常数{ 价值 }=event.target 如果计算{ Handledelite } 如果值==。&&!displayNum.toString.includes{ setDisplayNumprevValue=>prevValue.toString.concat。 }如果regex.testdisplayNum{ setDisplayNumvalue }否则{ setDisplayNumprevValue=>{ const prevValStr=prevValue.toString; 设numbersAfterDecimal=0; 如果上一版本包括“.”{ NumberAfterDecimal=prevValStr.split'.[1]。长度; //当前值 十进制++后的数字; } 返回ParseFloatPrevalstr.concatvalue.toFixednumbersAfterDecimal; } } } parseFloat去除小数点后的尾随零,您可以使用toFixed计算小数点后的数字

功能手柄更换{ 常数{ 价值 }=event.target 如果计算{ Handledelite } 如果值==。&&!displayNum.toString.includes{ setDisplayNumprevValue=>prevValue.toString.concat。 }如果regex.testdisplayNum{ setDisplayNumvalue }否则{ setDisplayNumprevValue=>{ const prevValStr=prevValue.toString; 设numbersAfterDecimal=0; 如果上一版本包括“.”{ NumberAfterDecimal=prevValStr.split'.[1]。长度; //当前值 十进制++后的数字; } 返回ParseFloatPrevalstr.concatvalue.toFixednumbersAfterDecimal; } }
}但在实例中,当0不是紧跟在“.”之后输入时,会发生这种情况。例如,我无法输入9.39002,这是因为每次更改后都会调用handleChange。当数字为9.39并且您尝试输入零时,它会将其视为尾随零并将其删除。但在实例中,当0不是紧跟在“.”之后输入时,会发生这种情况。例如,我无法输入9.39002,这是因为每次更改后都会调用handleChange。当数字为9.39,您尝试输入一个零时,它会将其视为尾随零并将其删除。您需要稍微更改方法。代码当前不处理数学运算correctly@user120242似乎有了下面提到的这个修改,我的代码对我测试的所有实例都有效,至少在视觉上是如此。你能告诉我哪里工作不正常吗?我正在看你的测试用例。它不需要通过它们吗?它似乎依赖于它是一个数字或字符串来通过部分测试,但这会导致后续测试失败,因为+运算符串联在数学运算后的行为不同?根据parseFloat和number vs string的行为,+运算符似乎会导致catch 22,其中一个或另一个测试将fail@user120242哦,是的,没错,我对这些测试用例有一个问题,因为当我查看它们的内部时,它显示我通过了0作为最终结果,而不是正确的值,但从视觉上看,我的代码给出了正确的答案。我使用eval函数来获得最终输出。它不会将我的最终结果转换为测试用例所期望的整数或浮点吗?您需要稍微改变一下方法。代码当前不处理数学运算correctly@user120242似乎有了下面提到的这个修改,我的代码对我测试的所有实例都有效,至少在视觉上是如此。你能告诉我哪里工作不正常吗?我正在看你的测试用例。它不需要通过它们吗?它似乎依赖于它是一个数字或字符串来通过部分测试,但这会导致后续测试失败,因为+运算符串联在数学运算后的行为不同?根据parseFloat和number vs string的行为,+运算符似乎会导致catch 22,其中一个或另一个测试将fail@user120242哦,是的,没错,我对这些测试用例有一个问题,因为当我查看它们的内部时,它显示我通过了0作为最终结果,而不是正确的值,但从视觉上看,我的代码给出了正确的答案。我使用eval函数来获得最终输出。它不会将我的最终结果转换为预期的整数或浮点吗 对于测试用例?
console.log(parseFloat('1.0'));
> 1