a formula b
31,283,700,000 round(a,-6) 31,284,000,000
60,204,605 round(a,-4) 60,200,000
私は、通貨の値を処理するためexcel式を有する が、私はこれを解決するためにjavascript、 任意のアイデアを使用して同じ結果を達成するために困難を持っていますか?Javascriptのラウンド関数
ありがとうございました。
a formula b
31,283,700,000 round(a,-6) 31,284,000,000
60,204,605 round(a,-4) 60,200,000
私は、通貨の値を処理するためexcel式を有する が、私はこれを解決するためにjavascript、 任意のアイデアを使用して同じ結果を達成するために困難を持っていますか?Javascriptのラウンド関数
ありがとうございました。
ライブラリを使用して大丈夫なら、lodashは、このための方法、_.round(number, [precision=0]) - computes number rounded to precision
を持っています。ここで
console.log(_.round(31283700000, -6));
console.log(_.round(60204605, -4));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
うわー..このlodashを何度も使っているが、それがとても素晴らしいことは分かっていない。thanks @parker –
丸めは、実装が容易である:
function excelRound(n, e) {
let f = Math.pow(10, e);
return Math.round(n * f)/f;
}
console.log(31283700000, -6, excelRound(31283700000, -6));
console.log(60204605, -4, excelRound(60204605, -4));
javascriptの浮動小数点の丸めエラーを修正するだけでなく、あなたが求めていたものの世話をするjavascriptの丸め関数です。より完全な説明はthis postにあります。
this postによって記載されているようにJavascriptを浮動小数点エラーが発生する可能性があります:
バイナリ浮動小数点演算はこのようなものです。ほとんどのプログラミングの 言語では、IEEE 754規格に基づいています。 JavaScriptは の64ビット浮動小数点表現を使用します。これはJavaの doubleと同じです。問題の要点は、数字が で表され、この形式が整数倍の2の累乗であることです。有理数 (分母が1/10のような)分母が2の累乗でない場合 は正確に表現できません。
function round(number, precision) {
number = +number;
precision = precision ? +precision : 0;
if (precision == 0) {
return Math.round(number);
}
var sign = 1;
if (number < 0) {
sign = -1;
number = Math.abs(number);
}
// Shift
number = number.toString().split('e');
number = Math.round(+(number[0] + 'e' + (number[1] ? (+number[1] + precision) : precision)));
// Shift back
number = number.toString().split('e');
return +(number[0] + 'e' + (number[1] ? (+number[1] - precision) : -precision)) * sign;
}
console.log(round(31283700000, -6)) //31,284,000,000
console.log(round(60204605, -4)) //60,200,000
[このポスト](https://codereview.stackexchange.com/questions/158781/rounding-javascript-decimals)は参考になりましたか? – mseifert