【问题标题】:weird math calculation [duplicate]奇怪的数学计算[重复]
【发布时间】:2013-12-08 12:34:29
【问题描述】:

可能重复:
Is JavaScript's Math broken?

我这里有一个javascript和html代码my code

在计算特定字段时我得到一个奇怪的值。现在只有一个复选框有一个脚本(背景音乐插件),只有当我选择带有任何 3 英寸卷轴中的 1 个的插件时,我才能得到 24.990000000000002 的总价。太奇怪了,只有这些输入......它应该只有 24.99......所有其他输入都可以工作并给出准确的总数,但只有 3 3in 字段给出了这些数字......通过反复试验我发现问题出在这里

regthreetot = parseFloat(regthree * 50);
regfourtot = parseFloat(regfour * 100);
regfivetot = parseFloat(regfive * 200);
regsixtot = parseFloat(regsix * 300);
regseventot = parseFloat(regseven * 400);
supthreetot = parseFloat(supthree * 50);
supfourtot = parseFloat(supfour * 100);
supfivetot = parseFloat(supfive * 200);
supsixtot = parseFloat(supsix * 300);
supseventot = parseFloat(supseven * 400);
sixthreetot = parseFloat(sixthree * 50);
sixfourtot = parseFloat(sixfour * 100);
sixfivetot = parseFloat(sixfive * 200);
sixsixtot = parseFloat(sixsix * 300);
sixseventot = parseFloat(sixseven * 400);

regthree、supthree 和 Sixthree 值都乘以 50...所有其他值都乘以 3 位数字...如果我将 50 更改为 100,它将给出正常答案...为什么这里的位数很重要,我该怎么做才能解决它?

【问题讨论】:

标签: javascript math checkbox


【解决方案1】:

这是因为浮点运算的工作方式。您可以通过四舍五入到小数点后 2 位来解决这个问题(无论如何您都不会使用小数):http://jsfiddle.net/vSsW9/1/

【讨论】:

  • 哇,这太棒了,非常感谢您……有不同的做事方式真是太好了!
  • 哦,如果你再次看到这个我对复选框还有另一个问题......所以如果我不取消选中该框,基本上值会保留(如果我按下清除按钮复选框的功能没有被激活)...是否有清除某个变量的功能,我可以在点击清除按钮时放入?
【解决方案2】:

好吧,直到你弄清楚你可以使用 Math.Round 来四舍五入到小数点后两位。假设您的结果变量被称为结果,请执行result=Math.round(result*100)/100

【讨论】:

  • 我实际上已经在我的代码中使用了 math.round ......只是不是为了那部分......但是上面的人把 .toFixed(2) 放在总数旁边......那是一样的吗?
  • 哦,如果你再次看到这个,我对复选框还有另一个问题......所以如果我不取消选中该框,基本上值会保持不变(如果我按下清除按钮复选框的功能没有被激活)...是否有清除某个变量的功能,我可以在点击清除按钮时放入?
【解决方案3】:

这是由于浮点变量不是 100% 准确,将其修复为最多 2 个小数点:

n.toFixed(2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多