web-dev-qa-db-ja.com

JavaScript:10進値

JavaScriptで10進型として何を使用できますか?サポートされていません(0.1 + 0.2 !== 0.3)、そして私は銀行/金融アプリケーションで正確な値を表すためにそれを必要としています。 JavaScriptの背後にある良い読み物と汚い詳細についてはJavaScriptの状態と未来を参照してください。 10進算術。

「10進数」とは、次のいずれかを意味します。

  1. 無限範囲および任意精度(JavaのBigDecimalなど)、または
  2. 範囲と精度は限られていますが、財務計算に適しています(C#のdecimalなど)。

では、10進値を操作するためのライブラリまたはソリューションは何ですか?ありがとう!

25
Mr. X

多くの場合推奨されます1 お金をセント数を表す整数として処理するには:2572ドルではなく25.72セント。これは、あなたが言及した浮動小数点演算の問題を回避するためです。幸い、浮動小数点の整数演算は正確であるため、スケーリングによって小数表現エラーを回避できます。


1Douglas Crockford: JavaScript:良い部分:付録A-ひどい部分(105ページ)

13
Daniel Vassallo

Javascriptは浮動小数点をサポートしています。しかし、とにかく、財務記録の場合、最も単純な実装は、値を標準の整数で格納することです。金額をセントで表す整数を宣言するか、1つはドル用、もう1つはセント用の2つの整数を宣言できます。

したがって、18.57ドルは、最初の手法では1857セント、2番目の手法では18ドルと57セントになります。

これには、整数が純粋に一意のバイナリ表現として格納されるため、丸め誤差などが発生しないため、完全に正確であるという追加の利点があります。

5
Razor Storm

BigNumberその投稿 も見てください。

3
Daniel O'Hara

次のライブラリはjs(ノードとブラウザ)に10進数を実装しているようです: https://npmjs.org/package/jsdecimal

2
pedroteixeira