toFixed() の仕組みを理解したら、「誤差ゼロで小数計算ができるライブラリ」 を使う方法を知っておくと、実務で格段に安心して扱えます。
ここでは、初心者にも扱いやすい代表的な 3 つを紹介します。
1. Big.js(軽量で信頼性の高い定番)
特徴
- JavaScript 標準の浮動小数点誤差を完全に回避
- 四則演算(+ − × ÷)をすべて正確に扱える
- ファイルサイズが小さく、金融・通貨計算などに最適
使い方(例)
<script src="https://cdn.jsdelivr.net/npm/big.js@6.2.1/big.min.js"></script>
<script>
const a = new Big(0.1);
const b = new Big(0.2);
const sum = a.plus(b);
console.log(sum.toString()); // "0.3" (誤差なし!)
// 小数桁を指定して出力
console.log(sum.toFixed(2)); // "0.30"
</script>
HTML普通の
0.1 + 0.2は0.30000000000000004になりますが、Big.js なら正確に0.3。
2. Decimal.js(より多機能な高精度ライブラリ)
特徴
Big.jsよりも高機能(指数表記、丸めモード、比較演算など)- 通貨・科学計算などでも使われる
- Node.js / ブラウザ両対応
使い方(例)
<script src="https://cdn.jsdelivr.net/npm/decimal.js@10.4.3/decimal.min.js"></script>
<script>
const x = new Decimal(1.005);
console.log(x.toFixed(2)); // "1.01" ← ちゃんと丸められる!
// 計算
const result = new Decimal(0.1).plus(0.2).times(3);
console.log(result.toString()); // "0.9"
// 丸めモード設定(四捨五入・切り上げ・切り捨てなど)
Decimal.set({ rounding: Decimal.ROUND_HALF_UP });
</script>
HTML
Decimal.jsはBig.jsより少し重いですが、丸め方式を自由に変えられる点が強力。
3. Dinero.js(通貨・金額計算に特化)
特徴
- 金額の丸め誤差を防ぐ「整数ベース」の通貨計算ライブラリ
- 通貨単位(JPY, USD など)やフォーマットも管理できる
- 金融アプリ・ECサイト・会計システムなどで便利
使い方(例)
<script type="module">
import { dinero, add, subtract, multiply, divide, toUnit } from 'https://cdn.jsdelivr.net/npm/dinero.js@2.0.0-rc.9/+esm';
import { USD } from '@dinero.js/currencies';
const price = dinero({ amount: 1999, currency: USD }); // $19.99(内部的には整数1999¢)
const tax = multiply(price, 0.1); // 10% 税金
const total = add(price, tax);
console.log(toUnit(total)); // → 21.99(正確な計算結果)
</script>
HTMLDinero.js は「金額 = セント単位の整数」として管理するので、誤差が物理的に発生しません。
⚖️ どれを使えばいいの?
| 用途 | おすすめ | 理由 |
|---|---|---|
| 軽量・簡単に誤差なし計算をしたい | Big.js | シンプル&信頼性高 |
| 科学計算・複雑な丸め制御が必要 | Decimal.js | 丸めモードや指数対応 |
| 金額・通貨の正確な取り扱い | Dinero.js | セント単位で誤差ゼロ |
参考:自作の「安全 toFixed」
もしライブラリを使わず「とりあえず誤差を減らしたい」ときは、以下のようなユーティリティ関数を使えます。
function safeToFixed(num, digits = 2) {
const factor = 10 ** digits;
return (Math.round((num + Number.EPSILON) * factor) / factor).toFixed(digits);
}
console.log(safeToFixed(1.005, 2)); // "1.01"
console.log(safeToFixed(0.1 + 0.2, 2)); // "0.30"
JavaScriptまとめ
| シーン | 解決策 |
|---|---|
| 表示用の桁そろえ | toFixed() |
| 誤差のない計算 | Big.js / Decimal.js |
| 通貨計算 | Dinero.js |
| 手軽に誤差軽減 | safeToFixed() 関数 |
誤差が出る・出ない仕組みの可視化図

