首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么在JavaScript中将9999999999999999转换为10000000000000000?

为什么在JavaScript中将9999999999999999转换为10000000000000000?
EN

Stack Overflow用户
提问于 2012-11-17 17:49:43
回答 6查看 10.3K关注 0票数 32

谁能给我解释一下为什么9999999999999999会被转换成10000000000000000?

代码语言:javascript
运行
复制
alert(9999999999999999); //10000000000000000

http://jsfiddle.net/Y2Vb2/

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-11-17 17:52:02

Javascript没有整数,只有64位浮点数--而且你已经用完了浮点精度。

请参阅Java中的类似问题:why is the Double.parseDouble making 9999999999999999 to 10000000000000000?

票数 40
EN

Stack Overflow用户

发布于 2012-11-17 17:55:33

  1. JavaScript只有浮点数,没有整数。

  1. Read 。

摘要:浮点数只包含有限的精度,超过15位(或更多),您将进行舍入。

票数 20
EN

Stack Overflow用户

发布于 2012-11-17 18:00:32

在JavaScript中,9999999999999999在内部被视为浮点数。它不能精确地用IEEE754双精度表示,因为它需要54位精度(位数是log2(9999999999999999) = 53,150849512...由于分数位不存在,因此结果必须向上舍入),而IEEE754仅提供53位(1个隐含位+ 52个显式存储的尾数位)-少一个位。因此,这个数字只需进行四舍五入。

因为在这种情况下只丢失了一位,所以即使是54位的数字也是完全可以表示的,因为它们仍然在位中包含0,这会丢失。给定IEEE 754的默认无偏舍入模式,奇数54位数字被舍入为最接近的值,恰好是双倍偶数53位数字。

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

https://stackoverflow.com/questions/13429451

复制
相关文章

相似问题

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