如何在JavaScript中准确地将数字转换为字符串

时间:2013-04-21 12:30:18

标签: javascript numbers tostring

JavaScript以双精度浮点格式存储所有数字,具有52位尾数和11位指数(用于存储数值的IEEE 754标准),因此其数字到字符串的转换通常是不准确的。例如,

111111111*111111111===12345678987654321

是正确的,但是

(111111111*111111111).toString()

返回“1234567898765432 0 ”而不是“1234567898765432 1 ”。同样,0.362*100会产生36.199999999999996

有没有一种简单的方法可以准确地将数字转换为字符串?

1 个答案:

答案 0 :(得分:3)

字符串转换的数字不是不准确的。数字本身以浮点存储,因为所有值都不能在浮点中精确表示,并且可存储的有效数字的数量有限(约16)。如果你需要完美的精度,你根本不能使用浮点数,你肯定不能使用具有这么多有效数字的数字。替代方案是整数,二进制编码小数,大十进制库等...

以下是表示浮点中某些值的问题的简单演示:http://jsfiddle.net/jfriend00/nv4MJ/

根据您实际尝试解决的问题,通常可以在转换为显示时使用toFixed(n)解决小数精度问题。

阅读其他参考资料以获得更多解释:

How to deal with floating point number precision in JavaScript?

Why can't decimal numbers be represented exactly in binary?

What range of numbers can be represented in a 16-, 32- and 64-bit IEEE-754 systems?

Why Floating-Point Numbers May Lose Precision - MSDN - Microsoft

Is floating point math broken?

Accurate floating point arithmetic in JavaScript

https://stackoverflow.com/questions/744099/is-there-a-good-javascript-bigdecimal-library