2012-08-02 92 views
0

可能重复:
Is JavaScript's Math broken?奇怪的数学计算

我这里有一个JavaScript和HTML代码my code

,我也得到一个奇怪的值时,计算具体领域。现在只有一个复选框有一个脚本(背景音乐插件),并且只有当我选择添加3in卷轴中的任何一个时,我会在总价格中获得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,它会给一个正常答案...为什么数字的数量在这里重要,我能做些什么来解决它?

+3

有** **必须是一个办法简化那段代码... – elclanrs 2012-08-02 05:50:57

+0

那里def是...我只是不知道如何...但 – user1556319 2012-08-02 05:51:54

+1

[不要使用花车](http://stackoverflow.com/questions/3730019/why-not -use-double-or-float-to-represent-currency) – Mat 2012-08-02 05:54:13

回答

0

这是因为float算法的工作原理。你可以通过四舍五入到小数点后两位(你不会使用分数的分数):http://jsfiddle.net/vSsW9/1/

+0

哇这是惊人的,作品非常感谢你...它很高兴有不同的方式来做事情! – user1556319 2012-08-02 05:59:06

+0

哦,如果你再次看到这个我有复选框的另一个问题...所以基本上值保持,如果我不取消选中框(如果我按下清除按钮复选框的功能不激活)。 ..是否有一个函数来清除某个变量,我可以放在明确的按钮onclick? – user1556319 2012-08-02 06:08:23

0

那么,直到你知道了,你可以使用Math.Round四舍五入到两位小数。假设你得到的变种被称为结果,做result=Math.round(result*100)/100

+0

我实际上已经在我的代码中使用了math.round ......只是不是那部分......但上面的那个人把.toFixed(2)放在了总数的旁边......是这样的吗? – user1556319 2012-08-02 06:01:05

+0

ohh如果你再次看到这个问题,我有复选框的另一个问题...所以基本上值保持,如果我不取消选中框(如果我按下清除按钮复选框的功能不激活)。 ..是否有一个函数来清除某个变量,我可以放在明确的按钮onclick? – user1556319 2012-08-02 06:08:30

0

它是由浮动的变量引起的不是100%准确的,将其固定到最多2小数点:

n.toFixed(2)