フロントエンドカンファレンス北海道2025
レギュラートーク(20分)

なぜJavaScriptの0.1 + 0.2は永遠に0.3にならないのか? - TC39 Decimal提案の現在地

6

JavaScriptで0.1 + 0.2を計算すると0.30000000000000004になる現象、経験ありませんか?

これはJavaScriptがIEEE 754という二進浮動小数点規格に従っているため、十進数を正確に表現できないことが原因です。
ECサイトの価格計算などで誤差が生じ、実際にバグの温床となっています。

この問題を解決するため、TC39ではDecimal(正確な十進数計算)の標準化を議論中ですが、
decimal.js等の関連ライブラリが広く利用され、圧倒的需要があるにも関わらず、5年間進展がありません。

用途は異なりますが、最近TC39 Stage 4に到達した浮動小数点関連のFloat16Arrayと比べ、なぜDecimalは停滞しているのか?
TC39のproposal-decimalを読み解き、なぜ需要があっても標準化が困難なのかを共有します。