簡體   English   中英

JS智能四舍五入小數

[英]JS smart rounding small numbers

我正在尋找一些算法來“智能”舍入小數。 例如:
讓我們有一個帶值的數組:
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
在那里我可以看到圓形的十進制數應該是 2。

謝謝!

您可以取最大值和最小值的增量,並通過取 10 的對數在開始時獲得零的計數。然后獲得一個正舍入整數作為固定數字的值。

 function round(array) { var min = Math.min(...array), max = Math.max(...array), fixed = Math.ceil(-Math.log10(max - min)); if (fixed < 0) return array; return array.map(v => v.toFixed(fixed)); } console.log(...round([4.0236180709235, 4.01949998319149])); console.log(...round([4.0236180709235, 4.09949998319149])) console.log(...round([100, 20000]));

抱歉,我還不能添加評論,所以我這樣回答。
我將該功能更改為:

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));
}

結果看起來不錯。
謝謝!

我改變它的原因是因為當我有更多數據並且最大值和最小值之間的差異很高時,它的返回值較小/壞的十進制數。 有了這個就像我需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM