From ecb7c20bbff5148671c42d972b0ff7b0aa1e2797 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Tue, 16 Nov 2021 17:04:29 -0800 Subject: [PATCH] Avoid truncation when formatting numbers --- modules/core/localizer.js | 4 ++-- test/spec/core/localizer.js | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/core/localizer.js b/modules/core/localizer.js index 2e100a4eb..e87bfde21 100644 --- a/modules/core/localizer.js +++ b/modules/core/localizer.js @@ -429,7 +429,7 @@ export function coreLocalizer() { 'formatToParts' in Intl.NumberFormat.prototype)) { return (number) => number.toString(); } else { - return (number) => number.toLocaleString(locale); + return (number) => number.toLocaleString(locale, { maximumFractionDigits: 20 }); } }; @@ -437,7 +437,7 @@ export function coreLocalizer() { // https://stackoverflow.com/a/55366435/4585461 const polyfill = (string) => parseFloat(string.trim()); if (!('Intl' in window && 'NumberFormat' in Intl)) return polyfill; - const format = new Intl.NumberFormat(locale); + const format = new Intl.NumberFormat(locale, { maximumFractionDigits: 20 }); if (!('formatToParts' in format)) return polyfill; const parts = format.formatToParts(12345.6); const numerals = Array.from({ length: 10 }).map((_, i) => format.format(i)); diff --git a/test/spec/core/localizer.js b/test/spec/core/localizer.js index 0dbe82c71..8f773663f 100644 --- a/test/spec/core/localizer.js +++ b/test/spec/core/localizer.js @@ -15,6 +15,7 @@ describe('iD.coreLocalizer', function() { expect(parseFloat(formatFloat(1.234))).to.eql(1.234); expect(parseFloat(formatFloat(1234))).to.eql(1234); expect(parseFloat(formatFloat(1234.56))).to.eql(1234.56); + expect(parseFloat(formatFloat(3.14159))).to.eql(3.14159); }); it('roundtrips Spanish numbers', function () { var localizer = iD.coreLocalizer(); @@ -24,6 +25,7 @@ describe('iD.coreLocalizer', function() { expect(parseFloat(formatFloat(1.234))).to.eql(1.234); expect(parseFloat(formatFloat(1234))).to.eql(1234); expect(parseFloat(formatFloat(1234.56))).to.eql(1234.56); + expect(parseFloat(formatFloat(3.14159))).to.eql(3.14159); }); it('roundtrips Arabic numbers', function () { var localizer = iD.coreLocalizer(); @@ -33,6 +35,7 @@ describe('iD.coreLocalizer', function() { expect(parseFloat(formatFloat(1.234))).to.eql(1.234); expect(parseFloat(formatFloat(1234))).to.eql(1234); expect(parseFloat(formatFloat(1234.56))).to.eql(1234.56); + expect(parseFloat(formatFloat(3.14159))).to.eql(3.14159); }); it('roundtrips Bengali numbers', function () { var localizer = iD.coreLocalizer(); @@ -42,6 +45,7 @@ describe('iD.coreLocalizer', function() { expect(parseFloat(formatFloat(1.234))).to.eql(1.234); expect(parseFloat(formatFloat(1234))).to.eql(1234); expect(parseFloat(formatFloat(1234.56))).to.eql(1234.56); + expect(parseFloat(formatFloat(3.14159))).to.eql(3.14159); }); }); });