【发布时间】:2018-02-05 15:55:06
【问题描述】:
我正在使用另一个我无法控制且看不到的代码库。我可以向它发送输入,它会将输出返回给我。这个代码库也没有指定它是用什么写的,但这并不重要,因为我只需要传递它的数字,它就会把它的输出数字交还给我。我只知道预期的输入和输出是什么。
我必须处理的一个输入要求我提供一个精确到小数点后 6 位的输入。我的大多数数字都将远高于 6 位小数,所以我可以对其进行四舍五入或截断,但如果它被四舍五入或随机恰好是像 0.125 或 0.5 这样的数字,我无法输入正确的数字。
例如,如果我有一个像0.5 这样的数字,那是一个有效且合法的数字,但我输入它的函数不会接受它并且会出错,因为它不是精确到小数点后 6 位的数字像0.500000 这样的地方。我也无法输入"0.500000" 的字符串,因为它正在寻找一个数字,而不是一个字符串,所以它也会出错。
在原生 JavaScript 中是否有一个数字保持特定的精度,即使它的末尾有额外的死零?
例子:
(1/2).toFixed(6) === "0.500000" // the toFixed() function returns a *String*, not a *Number*.
(1/2).toFixed(6) /1 === 0.5 // dividing by 1 coerces it to a Number, but drops the decimals back off the end.
Number( (1/2).toFixed(6) ) === 0.5 // Trying to convert it into a Number using the Number Constructor does the same as the example above it.
*编辑:为了清楚起见,我需要一个小数点后 6 位的数字,而不是字符串。
【问题讨论】:
-
我不明白第一个代码示例有什么问题。
-
JS中没有这样的数字。 + 你甚至不需要它。显示时,使用字符串表示,用数字计算时,使用原生精度。
-
如果您只想显示数字,那么您可以将数字转换为字符串并在最后一个小数位后添加零。
-
HTML 甚至无法显示数字,它们无论如何都会被转换为字符串...
-
数字没有固定的小数位数。它们有动态数量的二进制位置,没有办法改变它。对不起。如果您关心十进制表示,请使用字符串或控制输出方法。
标签: javascript decimal precision tofixed