为什么在Chrome JavaScript中,1.3*1.3的评估值为16900000000000002

Why in Chrome JavaScript evaluates 1.3*1.3 as 1.6900000000000002?

本文关键字:评估 16900000000000002 JavaScript 为什么 Chrome      更新时间:2023-09-26

有什么方法可以解决这个问题吗?

因为浮点是用二进制表示的,而不是十进制。有些十进制数字无法精确表示。不幸的是,由于Javascript只有一个Number类,所以它不是一个很好的工具。其他语言也有不错的十进制库,专门用来避免这种错误。你要么接受一美分的错误,要么在服务器端实现解决方案,要么非常努力地解决这个问题。

参见:

JavaScript浮点数问题

浮点数字php/java(服务器端)的二进制表示

因为javascript中的float(读:doubles)不是很准确,所以可以四舍五入以使用更少的小数来隐藏问题。做这件事的一个非常棘手的方法是:

var num = 1.3*1.3;
Math.round(num * 100)/100;