JSスマートは、小さな数値を丸めます

フェルディナンド:

私は、「スマート」丸い小さな数字にはいくつかのアルゴリズムを探しています。例えば:
:レッツは、値を持つ配列持た
0:4.0236180709235
1:4.02462309509067
2:4.02412058061092を


17:4.01599998414516
18:4.01599998414516
19:4.01949998319149

そして、私はこの配列を見れば私はできSEこの数字は0.000の位置にあるほとんどが異なっていること、それは返す必要がありますので、 - > 3(私は、=> .toFixedで使用していること(3))

おそらく私は、小数点以下の桁数のための最高の数その配列の最大値と最小値とし、その取得の違いをカルク必要があります。

またはループ配列います...

第二の例:
0:4.0236180709235
1:4.01462309509067
2:4.03412058061092


17:4.05599998414516
18:4.06599998414516
19:4.09949998319149
私はラウンドの進数は2でなければならないことがあり見ることができます

ありがとう!

フレデリックFako:

申し訳ありませんが、私はまだそのようなので、私の答えをコメントを追加することはできません。
私はその機能を変更するには:

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

そして、結果はよさそうです。
ありがとう!

私は、最大と最小の間でより多くのデータとの差分を持っていたときだったので、その変更された理由は、その戻り小さい/悪い進数高かったです。私が必要のようなこれです。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=12783&siteId=1