Fer*_*and 5 javascript math floating-point decimal rounding
我正在寻找一些算法来“智能”舍入小数字。例如:
让我们的数组具有以下值:
0: 4.0236180709235
1: 4.02462309509067
2: 4.02412058061092
。
。
17:4.01599998414516
18:4.01599998414516
19:4.01949998319149
如果我查看这个数组,我可以发现这些数字在 .000 位置大部分不同,因此它应该返回 -> 3 (然后我在 => .toFixed(3) 中使用)
也许我应该计算数组的最大值和最小值之间的差,并从中得到小数位的最佳数字。
或者循环该数组...
第二个示例:
0: 4.0236180709235
1: 4.01462309509067
2: 4.03412058061092
。
。
17: 4.05599998414516
18: 4.06599998414516
19: 4.09949998319149
在那里我可以看到 round 的十进制数应该是 2。
谢谢!
抱歉,我还不能添加评论,所以我就这样回答。
我将该函数更改为:
function round(array) {
var min = Math.min(...array),
max = Math.max(...array),
spacing = (max - min) / (max - 1),
fixed = Math.ceil(-Math.log10(spacing));
if (fixed < 0) return array;
return array.map(v => v.toFixed(fixed));
}
Run Code Online (Sandbox Code Playgroud)
结果看起来不错。
谢谢!
我改变这一点的原因是因为当我有更多数据并且最大值和最小值之间的差异很高时,它返回较小/错误的十进制数。这就是我所需要的。