为什么 Node.js 会自动舍入我的浮点数?
Why is Node.js automatically rounding my floating point?
我正在尝试编写一个函数,使用来自 here.
的答案作为参考,获取浮点文字中小数点后的小数位数
虽然这在浏览器控制台中尝试时似乎工作正常,但在 Node.js 环境中 运行 测试用例时,精度最多只被截断到 14 位数字。
let data = 123.834756380650877834678
console.log(data) // 123.83475638065088
函数 returns 14 作为答案。
为什么四舍五入发生在休息?这是默认行为吗?
这是 JavaScript.I 的默认行为,认为在 node.js 中也是如此。
在JS中最大小数位数是17。
有关详细信息,请查看 here
JavaScript(大概 Node.js)中使用的浮点格式是 IEEE-754 binary64。源代码中使用123.834756380650877834678
时,会转换为最接近的可表示值,即123.834756380650873097692965529859066009521484375.
将其转换为具有默认格式的字符串时,JavaScript uses just enough digits to uniquely distinguish the value。对于 123.834756380650873097692965529859066009521484375,这应该产生“123.83475638065087”。如果您得到的是“123.83475638065088”,最后一位数字不同,那么您使用的软件不符合 JavaScript 规范 (ECMAScript)。
无论如何,binary64格式的精度不足以保留原始数字“123.834756380650877834678”小数点后21位的信息。
您 link 使用的代码也不会也无法计算原始数字中的位数。它计算在转换为 binary64 后唯一区分所表示的值所需的位数。对于小数点后没有尾随零的足够短的数字,这与原始数字中小数点后的位数相同。对于其他人来说,可能不是。
我正在尝试编写一个函数,使用来自 here.
的答案作为参考,获取浮点文字中小数点后的小数位数虽然这在浏览器控制台中尝试时似乎工作正常,但在 Node.js 环境中 运行 测试用例时,精度最多只被截断到 14 位数字。
let data = 123.834756380650877834678
console.log(data) // 123.83475638065088
函数 returns 14 作为答案。
为什么四舍五入发生在休息?这是默认行为吗?
这是 JavaScript.I 的默认行为,认为在 node.js 中也是如此。
在JS中最大小数位数是17。
有关详细信息,请查看 here
JavaScript(大概 Node.js)中使用的浮点格式是 IEEE-754 binary64。源代码中使用123.834756380650877834678
时,会转换为最接近的可表示值,即123.834756380650873097692965529859066009521484375.
将其转换为具有默认格式的字符串时,JavaScript uses just enough digits to uniquely distinguish the value。对于 123.834756380650873097692965529859066009521484375,这应该产生“123.83475638065087”。如果您得到的是“123.83475638065088”,最后一位数字不同,那么您使用的软件不符合 JavaScript 规范 (ECMAScript)。
无论如何,binary64格式的精度不足以保留原始数字“123.834756380650877834678”小数点后21位的信息。
您 link 使用的代码也不会也无法计算原始数字中的位数。它计算在转换为 binary64 后唯一区分所表示的值所需的位数。对于小数点后没有尾随零的足够短的数字,这与原始数字中小数点后的位数相同。对于其他人来说,可能不是。