diff --git a/lib/money.ts b/lib/money.ts index 01e4511..1a7f473 100644 --- a/lib/money.ts +++ b/lib/money.ts @@ -4,7 +4,7 @@ export function dollarsToCents(value: unknown): number | null { if (value === "" || value == null) return null; if (typeof value === "number") { if (!Number.isFinite(value) || value <= 0) return null; - return Math.round(value * 100); + return dollarsToCents(String(value)); } const text = String(value).trim().replace(/\s+/g, ""); @@ -12,5 +12,6 @@ export function dollarsToCents(value: unknown): number | null { const amount = Number(text.replace(/[$,]/g, "")); if (!Number.isFinite(amount) || amount <= 0) return null; - return Math.round(amount * 100); + const cents = Math.round(amount * 100); + return cents > 0 ? cents : null; } diff --git a/tests/money.test.mjs b/tests/money.test.mjs index e12f083..c0cb6a1 100644 --- a/tests/money.test.mjs +++ b/tests/money.test.mjs @@ -20,6 +20,9 @@ test("dollarsToCents rejects partial or non-decimal strings", () => { test("dollarsToCents handles numeric values without accepting non-finite numbers", () => { assert.equal(dollarsToCents(2.5), 250); + assert.equal(dollarsToCents(1.23), 123); + assert.equal(dollarsToCents(1.234), null); + assert.equal(dollarsToCents(0.004), null); assert.equal(dollarsToCents(Number.NaN), null); assert.equal(dollarsToCents(Number.POSITIVE_INFINITY), null); });