总和的结果

时间:2010-03-02 09:48:45

标签: javascript sum

为什么9.1 + 3.3不是12.4?

<script>

  alert( 9.1 + 3.3 )

</script>

结果:1​​2.399999999

......我该如何总结呢?

7 个答案:

答案 0 :(得分:2)

这是浮点错误,其中变量无法精确存储值。如果你只是工作到一个小数位,那么你可以将你的所有数字乘以10来进行计算,因为这会将所有数字保持为整数,你不应该得到你所看到的问题。显然,当显示数字时,你必须将它除以10。

答案 1 :(得分:2)

这来自浮点数精度。这个问题伴随着每种编程语言,并且是由实数可以具有无限数量的数字引起的。所以总是给出精确度。

您可以尝试:Number(9.1+3.3).toPrecision(3)

答案 2 :(得分:2)

尝试

alert((9.1 + 3.3).toFixed(1));

toFixed()方法将数字格式化为使用指定数量的尾随小数。

对数字进行四舍五入,并在小数点后添加空值(如果需要),以创建所需的小数长度。

答案 3 :(得分:2)

这是IEEE 754传统的JavaScript幽灵,困扰着你和其他所有JavaScript开发人员。

看看Crockford的presentation,你会得到更好的理解

至于如何:你应该通过乘以它们将小数字变成整数,最后将它们转回小数。

答案 4 :(得分:0)

有趣的是,通过交换价值,你得到了正确的结果!

答案 5 :(得分:0)

原因是浮点数。您可以使用一种方法将数字四舍五入到小数点后的所需位置。

<script language="javascript">

function formatNumber(myNum, numOfDec)
{
var decimal = 1
for(i=1; i<=numOfDec;i++)
decimal = decimal *10

var myFormattedNum = (Math.round(myNum * decimal)/decimal).toFixed(numOfDec)
return(myFormattedNum)
}
</script> 

答案 6 :(得分:0)

  

使用Math.round函数对值进行舍入。

警报(Math.round(9.1 + 3.3));