Numbers
number: 0.1 + 0.2 は厳密な 0.3 にならない
IEEE 754 の二進浮動小数点では、多くの十進小数を正確に表現できません。
SourcedecimalPrecision.ts
Node.js 22
export function addCents(left: number, right: number): number {
return left + right;
}TestdecimalPrecision.test.ts
Node.js 22
import assert from "node:assert/strict";
import test from "node:test";
import { addCents } from "../../src/numbers/decimalPrecision.js";
test("小数の加算は厳密な0point3と等しくない", () => {
assert.equal(0.1 + 0.2 === 0.3, false);
assert.equal(addCents(10, 20), 30);
});01Assertion
このテストで確認できること
- 0.1 + 0.2 は === 0.3 でない
- 最小通貨単位の整数なら加算を正確に表現できる
金額は用途に応じて整数の最小単位、または十進演算ライブラリを使います。number の近似値を暗黙のまま比較しません。
OBSERVED RESULT
expected: 0.1 + 0.2 === 0.3 → false
actual: false
expected: 10 + 20 cents → 30 cents