Skip to content

JavaScript 浮点型加法的奇怪现象

🏷️ JavaScript

javascript
var a = 6.65;
var b = 9.8;
var c = a + b;

结果c的值为 16.450000000000003

Why?


JavaScript 数字精度丢失问题总结


js
// toFixed 修复
function toFixed(num, s) {
    var times = Math.pow(10, s)
    var des = num * times + 0.5
    des = parseInt(des, 10) / times
    return des + ''
}

在这篇文章的末尾还发现了一个有趣的网站 0.30000000000000004.com

不止 js 有这种问题,C# 和 java 中都有同样的问题。

csharp
Console.WriteLine("{0:r}", .1 + .2);
Console.WriteLine("{0:f}", .1m + .2m);

输出结果为 :

> 0.30000000000000004
0.30

还有一篇很专业的论文:What Every Computer Scientist Should Know About Floating-Point Arithmetic