Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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 .toFixed()是否会导致错误的计算?_Javascript - Fatal编程技术网

Javascript .toFixed()是否会导致错误的计算?

Javascript .toFixed()是否会导致错误的计算?,javascript,Javascript,我正在创建一个简单的计算器,以显示进行兑换所需的最少硬币数量。用户输入变化量,函数输出所需的25美分、10美分、5美分和1美分的数量。除非百位数字(便士数字)是3或8,否则代码似乎功能完美。在这种情况下,它的产出比需要的少一分钱。这种不正确的输出是由于在此上下文中使用Math.ceil还是toFixed造成的?可以用什么来代替 我在显示非整数硬币的窗口作为解决方案时遇到了问题,这就是为什么我开始使用Math.ceil()和toFixed() 函数changeCalc(){ 设a=documen

我正在创建一个简单的计算器,以显示进行兑换所需的最少硬币数量。用户输入变化量,函数输出所需的25美分、10美分、5美分和1美分的数量。除非百位数字(便士数字)是3或8,否则代码似乎功能完美。在这种情况下,它的产出比需要的少一分钱。这种不正确的输出是由于在此上下文中使用Math.ceil还是toFixed造成的?可以用什么来代替

我在显示非整数硬币的窗口作为解决方案时遇到了问题,这就是为什么我开始使用Math.ceil()和toFixed()

函数changeCalc(){
设a=document.getElementById(“changeTotal”).value;
设b=(a%0.25).toFixed(2);
设quartersNum=Math.ceil((a-b)/0.25);
如果(b>0){
var c=(b%0.1)。toFixed(2);
var dimesum=数学ceil((b-c)/0.1);
如果(c>0){
VarD=(c%0.05)。toFixed(2);
var nicklesNum=数学ceil((c-d)/0.05);
如果(d>0){
var e=(d%0.01).toFixed(2);
var penniesNum=Math.ceil((d-e)/0.01);
document.getElementById(“changeWindow”).innerHTML=
`${quartesnum}quarters,${dimesNum}dimes,${nicklesNum}nickles,
${penniesNum}pennies`;
}否则{
document.getElementById(“changeWindow”).innerHTML=
`${quartesnum}quarters,${dimesNum}dimes,${nicklesNum}
尼克尔斯`;
}
}否则{
document.getElementById(“changeWindow”).innerHTML=
`${quartersNum}quarters,${dimessnum}dimes`;
}
}否则{
document.getElementById(“changeWindow”).innerHTML=
`${quartensum}quarters`;
}
}是的,确实如此

在您的例子中:每次d=0.03,e都将是0.01,因为(0.03%0.01)将被计算为0.00999999998,这将通过.toFixed(2)计算为0.01

但是对于你的问题,如果你改变,这可以解决

if (d > 0) {
   var e = (d % 0.01).toFixed(2);
   var penniesNum = Math.ceil((d - e) / 0.01);


我希望这能对您有所帮助。

这并不是
toFixed()
ceil()
的问题,更确切地说,这是一个问题,尤其是在

有很多方法可以解决这个问题,但对于您的问题,通常使用不必处理浮点数的解决方案来解决,例如,将初始数乘以100得到18,那么您就可以完全避免这个问题

函数更改计算器(inputString){
设a=parseInt(inputString*100);
设b=a%25;
设quartersNum=数学楼层(a/25);
如果(b>0){
风险值c=b%10;
var dimesNum=数学楼层(b/10);
如果(c>0){
风险值d=c%5;
var nicklesNum=数学楼层(c/5);
如果(d>0){
var penniesNum=d;
console.log(
`${quartesnum}quarters,${dimesNum}dimes,${nicklesNum}nickles,
${penniesNum}pennies`);
}否则{
console.log(
`${quartesnum}quarters,${dimesNum}dimes,${nicklesNum}
尼克尔斯`);
}
}否则{
console.log(
`${quartersNum}quarters,${dimessnum}dimes`);
}
}否则{
console.log(
`${quartensum}quarters`);
}
}
控制台日志($0.18为:);
changeCalc(“0.18”);
控制台日志($0.24为:);
changeCalc(“0.24”);
控制台日志($0.33为:);

changeCalc(“0.33”)为什么首先要使用字符串进行计算和数字比较?关于toFixed()=>JavaScript的一些想法与整数和小数有关。您可以解析整数或十进制数,并对输入的每个数字执行数学运算。Thank You Spencer的可能副本。这个链接让我对问题的根源有了一些有用的见解。
if (d > 0) {
   var penniesNum = Math.ceil((d) / 0.01);