我有这个JavaScript函数:
Contrl.prototype.EvaluateStatement = function(acVal, cfVal) {
var cv = parseFloat(cfVal).toFixed(2);
var av = parseFloat(acVal).toFixed(2);
if( av < cv) // do some thing
}
当我比较浮点数av=7.00
和cv=12.00
时,7.00<12.00
的结果为false
!
任何想法为什么?
答案 0 :(得分:36)
toFixed返回一个字符串,并且您正在比较两个结果字符串。从词汇上看,12比1来自7比12之前。 7。
我想你要比较一下:
(Math.round(parseFloat(acVal)*100)/100)
舍入到两位小数
答案 1 :(得分:9)
比较浮点数和精度:
var precision = 0.001;
if (Math.abs(n1 - n2) <= precision) {
// equal
}
else {
// not equal
}
UPD: 或者,如果其中一个数字是精确的,则将精度与相对误差进行比较
var absoluteError = (Math.abs(nApprox - nExact)),
relativeError = absoluteError / nExact;
return (relativeError <= precision);
答案 2 :(得分:2)
Math.fround()函数返回数字的最接近的32位单精度浮点表示形式。
因此,它是比较2个浮点数的最佳选择之一。
if (Math.fround(1.5) < Math.fround(1.6)) {
console.log('yes')
} else {
console.log('no')
}
>>> yes
// More examples:
console.log(Math.fround(0.9) < Math.fround(1)); >>> true
console.log(Math.fround(1.5) < Math.fround(1.6)); >>> true
console.log(Math.fround(0.005) < Math.fround(0.00006)); >>> false
console.log(Math.fround(0.00000000009) < Math.fround(0.0000000000000009)); >>> false
答案 3 :(得分:1)
使用短符号比较浮点数,也接受浮点数作为字符串和整数:
var floatOne = 2, floatTwo = '1.456';
Math.floor(floatOne*100) > Math.floor(floatTwo*100)
(!)注意:使用整数进行比较。幕后实际发生的事情:200 > 145
使用零&#39扩展100以获得更多小数精度。例如,使用1000表示3位小数精度。
<强>测试强>
var floatOne = 2, floatTwo = '1.456';
console.log(Math.floor(floatOne*100), '>', Math.floor(floatTwo*100), '=', Math.floor(floatOne*100) > Math.floor(floatTwo*100));
&#13;