首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >js toFixed问题?

js toFixed问题?
EN

Stack Overflow用户
提问于 2012-05-15 15:34:39
回答 1查看 1.1K关注 0票数 2
代码语言:javascript
复制
Number(123.456).toFixed(20)

喷出

代码语言:javascript
复制
"123.45600000000000306954"

306954从哪里来?我知道用二进制表示的数字是不准确的。但是,我在文档中没有发现调用号码(/../)会导致精度下降的任何说法。

mdn

一种数字的字符串表示形式,它不使用指数表示法,并且在小数位之后有精确的数字数字。如果有必要,数字会四舍五入,如果有必要,小数部分会用零填充,以使其具有指定的长度。如果数字大于1e+21,则此方法只调用Number.toString()并以指数表示法返回字符串

编辑

toFixed返回不动点而不是浮点..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-15 15:38:45

这完全与十进制数字的浮点表示有关。

计算机不能准确地表示123.456,因此使用最近的二进制数代替。

有关更多细节,请参见浮点导轨关于浮点算法,每个计算机科学家应该知道什么?

根据第一个链接,没有内置的解决方案(i,.e )。( Javascript中的十进制类型)。如果这对您来说是一个真正的问题,而不是一个奇怪的问题,那么Java的BigDecimal类是可用的。

回复编辑:这不是Number的问题。在您的工作示例中,您声明了一个整数字面值(123) --它们可以精确地表示。在失败的示例中,您使用了浮点文本123.456,它目前由运行时处理,它将由一系列不完全是123.456的二进制数字表示。

问题在于浮点文字,而不是Number本身。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10604105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档