我有以下功能:
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应用程序的语言是什么?
答案 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)
答案 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()
,但请注意这些任意小数位的缩减。希望这有点帮助。