"49.77"-6ren">
gpt4 book ai didi

javascript - toFixed() 函数背后的规则是什么

转载 作者:行者123 更新时间:2023-12-03 07:20:49 31 4
gpt4 key购买 nike

我正在测试 javascript 的 toFixed() 方法。结果如下图。

(49.175).toFixed(2) => "49.17"
(49.775).toFixed(2) => "49.77"
(49.185).toFixed(2) => "49.19"
(49.785).toFixed(2) => "49.78"

(49.1175).toFixed(3) => "49.117"
(49.1775).toFixed(3) => "49.178"
(49.1185).toFixed(3) => "49.118"
(49.1785).toFixed(3) => "49.178"

我在 chrome 浏览器上做了这个测试,我对结果感到惊讶。我无法理解其中的逻辑。它既不适合“从零开始四舍五入”也不适合“四舍五入”。“toFixed()”函数背后的规则是什么?

最佳答案

About toFixed

返回一个包含此数字值的字符串,该数字值以十进制定点表示法表示,小数点后有 fractionDigits 位。如果 fractionDigits 未定义,则假定为 0。具体执行以下步骤:

算法 Number.prototype.toFixed (fractionDigits):https://www.ecma-international.org/ecma-262/5.1/#sec-15.7.4.5

  • toFixed方法的length属性为1。

    • 如果使用多个参数调用 toFixed 方法,则行为未定义(参见第 15 条)。

对于小于 0 或大于 20 的 fractionDigits 值,允许实现扩展 toFixed 的行为。在这种情况下,toFixed 不一定会为此类值抛出 RangeError。

注意对于某些值,toFixed 的输出可能比 toString 更精确,因为 toString 仅打印足够的有效数字以将数字与相邻数值区分开来。

JS Work Around

function fix(n, p) {
return (+(Math.round(+(n + 'e' + p)) + 'e' + -p)).toFixed(p);
}
let exampleA = fix(49.1175, 3);
let exampleB = fix(49.1775, 3);
let exampleC = fix(49.775, 2);
const random = Math.random();
console.log(exampleA);
console.log(exampleB);
console.log(exampleC);
console.log('Before:', random, 'After Custom =>', fix(random, 3), 'Default:', random.toFixed(3));
// 49.118
// 49.178
// 49.78

Precision Needed

我建议只是简单地将 set precisionC++ 移植到 Node.JS 模块。

  • 您可以简单地在 Node.JS 中安装并使用 child_process 来调用带参数的 C++ 程序,并让C++ 运行一个函数来转换值并输出到控制台。

关于javascript - toFixed() 函数背后的规则是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55425467/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com