繁体   English   中英

为什么 Node.js 会自动舍入我的浮点数?

[英]Why is Node.js automatically rounding my floating point?

我正在尝试编写一个 function ,它将使用此处的答案作为参考来获取浮点文字中小数点后的小数位数。

尽管在浏览器控制台中尝试这似乎工作正常,但在 Node.js 环境中运行测试用例时,精度仅被截断至 14 位。

let data = 123.834756380650877834678
console.log(data) // 123.83475638065088

function 返回 14 作为答案。

为什么在 rest 发生舍入? 这是默认行为吗?

JavaScript(可能是 Node.js)中使用的浮点格式是 IEEE-754 binary64。 源代码中使用123.834756380650877834678时,将其转换为最接近的可表示值,即 123.834756380650873097692965529859066009521484375。

将其转换为具有默认格式的字符串时, JavaScript 使用足够的数字来唯一区分 value 对于 123.834756380650873097692965529859066009521484375,这应该产生“123.83475638065087”。 如果您收到“123.83475638065088”,最后一位不同,那么您使用的软件不符合 JavaScript 规范 (ECMAScript)。

在任何情况下,binary64 格式都没有足够的精度来保留原始数字“123.834756380650877834678”在小数点后有 21 位的信息。

您链接到的代码也不会也无法计算原始数字中的位数。 它计算唯一区分转换为 binary64 后表示的值所需的位数。 对于足够短的数字,小数点后没有尾随零,这与原始数字中小数点后的位数相同。 对于其他人来说,可能不是。

这是 JavaScript 的默认行为。我认为它在 node.js 中会相同。

在 JS 中的最大小数位数是 17。

有关更多详细信息,请查看此处

暂无
暂无

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

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