简单的javascript decimal添加产生不正确的结果

时间:2014-04-25 04:40:43

标签: javascript math

我有以下功能:

var a = 0.1;
var b = 0.2;

function checkValue(){
    if(a + b === 0.3){
        alert('statement is true');   
    }
    else {
        alert('statement is false');   
    }
}

checkValue();

此函数的计算结果为false? Here is fiddle

现在,具有不同小数的相同函数也等于0.3:

var a = 0.15;
var b = 0.15;

function checkValue(){
    if(a + b === 0.3){
        alert('statement is true');   
    }
    else {
        alert('statement is false');   
    }
}

checkValue();

评估为真。

有没有人遇到过这个?如果是这样,通常用于不执行此操作的Web应用程序的语言是什么?

6 个答案:

答案 0 :(得分:1)

JS中的浮动数字不准确。幸运的是,第二个例子对你来说评估为真......它可能不在别人的计算机上。有关变通方法,请参阅此主题: How to deal with floating point number precision in JavaScript?

答案 1 :(得分:1)

浮点数在大多数编程语言中都是不准确的,因为它们存储值的方式。

因此,0.1 + 0.2 == 0.3评估为false仅评估 0.3 == 0.3

在部署的软件和主要公司中,这引起了多少大规模的问题。

答案 2 :(得分:1)

试试这个FIDDLE

它的工作。

在javascript中使用此代码

variable.toFixed(2)

答案 3 :(得分:0)

您可以通过固定小数来修复浮点问题,如下所示:

if((a + b).toFixed(1) == 0.3){
 alert('statement is true');   
}else{
 alert('statement is false');   
}

答案 4 :(得分:0)

试试这个

a + b = 0.300004 所以你必须使用.toFixed()

var a = 0.1;
var b = 0.2;

function checkValue(){
    var answer = a + b;
    alert(answer.toFixed(1))
if(answer === 0.3){
 alert('statement is true');   
}
else {
 alert('statement is false');   
}
}

checkValue();

答案 5 :(得分:0)

当你将它们加在一起时,由于一些奇怪的原因它会返回30000000000000004。要解决此问题,如上所列,您可以使用.toFixed(1),根据您提供的参数编号,舍入到某个小数位。还有其他方法可以进行回合。您可以执行Math.round(),但请注意这些任意小数位的缩减。希望这有点帮助。