繁体   English   中英

number js mdn doc 中的 17 位小数点精度是什么意思?

[英]What 17 decimal places of precision means in number js mdn doc?

 const a = 10; const b = 0.123456789123456789; console.log((a + b).toFixed(17)); // 10.12345678912345726

从上面的示例中可以看出, .12345678912345只有这部分显示正确,据我了解 Javascript 只考虑 15 位精度(包括. )。 如果我将 10 更改为 100,它将是相同的数量,但我认为 MDN 文档应该是 17 位精度。 这个短语不是精确表示17 decimal places of precision吗?

如果我在没有.toFixed()方法的情况下显示它,它将显示相同的 15 精度10.123456789123457 - a + b响应

Url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number

根据JS/ECMAScript规范, Number type使用双精度浮点数,具有64-bit格式( binary64 ),由一个符号位(确定正负值)、 11指数位和52个小数位(每个数字代表4位,因此64位有16位):

Number 类型表示 IEEE 二进制浮点运算标准中指定的双精度 64 位格式 IEEE 754-2008 值。

可以使用双精度正确表示的最大正数是9007199254740992 ,这可以通过使用Math.pow(2, 53)来实现。 如果数字范围在Math.pow(2, 53)Math.pow(2, 54)之间(或Math.pow(2, -53)Math.pow(2, -54)之间),则只有偶数可以正确表示,因为指数位会影响小数位的LSB (最低有效位)。

让我们回顾一下大数部分:

var x = 12345678912345.6789

var x = new Number(12345678912345.6789)

该数字包含超过52个小数位(总共72位),因此四舍五入用于将小数位保留为52

还有这个十进制数:

var x = new Number(.12345678912367890)

这个数字包含68个小数位,因此最后一个零被切掉以保持64位长度。

通常大于9007199254740992或小于1.1102230246251565E-16的数字表示形式存储为文字字符串而不是Number 如果您需要计算非常大的数字,可以使用某些外部库来执行任意精度的算术运算。

如果你想在小数点后多于 16 点,你可以:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM