3 回答

TA贡献1条经验 获得超0个赞
JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会有这个问题
解决办法:
一、先把需要运算的小数扩大成整数,运算后在缩小相同倍数。
二、使用toFixed()

TA贡献1779条经验 获得超6个赞
var a = 0.1;
var b = 0.2;
console.log(a + b); //0.30000000000000004
console.log((a * 10 + b * 10) / 10); //0.3

TA贡献2041条经验 获得超4个赞
虽然题主已经采纳了答案了,但是我还是要根据我以往的经验来分享一下
建议使用bignumber这个库。
题主的具体业务可以决定使用 * 10 ^n / 10 ^n
的方式,但我就举一个例子,
将320.21小时转换成x天x小时形式,我们希望得到的结果是13天8.21小时
var input = 320.21;
var day = Math.floor(input / 24); // day == 13
var hour = (input - 24 * day) * 100 / 100; //bad
var hour2 = (input * 100 - 24 * day * 100) / 100; // bad
//结果会是类似这个结果:8.209999999999964
那么如果使用bignumber呢
var input = 320.21;
var bg = new BigNumber(input);
var day = Math.floor(input / 24);
var hour = bg.minus(day * 24);
console.log(day + 'D' + hour + 'H');
添加回答
举报