From ab442b76ac4a61ed12d52e383648e74ece24d0fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Sat, 4 Mar 2023 23:43:40 -0800 Subject: [PATCH] Preserve precision in raw tags --- modules/core/localizer.js | 4 ++-- modules/ui/fields/input.js | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/core/localizer.js b/modules/core/localizer.js index 9e7d9850c..59067f699 100644 --- a/modules/core/localizer.js +++ b/modules/core/localizer.js @@ -448,7 +448,7 @@ export function coreLocalizer() { */ localizer.floatParser = (locale) => { // https://stackoverflow.com/a/55366435/4585461 - const polyfill = (string) => parseFloat(string.trim()); + const polyfill = (string) => +string.trim(); if (!('Intl' in window && 'NumberFormat' in Intl)) return polyfill; const format = new Intl.NumberFormat(locale, { maximumFractionDigits: 20 }); if (!('formatToParts' in format)) return polyfill; @@ -481,7 +481,7 @@ export function coreLocalizer() { var literal, group, decimal; if ('Intl' in window && 'NumberFormat' in Intl) { const format = new Intl.NumberFormat(locale, { maximumFractionDigits: 20 }); - if (('formatToParts' in format)) { + if ('formatToParts' in format) { const parts = format.formatToParts(-12345.6); const literalPart = parts.find(d => d.type === 'literal'); literal = literalPart && new RegExp(`[${literalPart.value}]`, 'g'); diff --git a/modules/ui/fields/input.js b/modules/ui/fields/input.js index 7bbfd5380..cc8c84f96 100644 --- a/modules/ui/fields/input.js +++ b/modules/ui/fields/input.js @@ -401,7 +401,8 @@ export function uiFieldText(field, context) { var vals = val.split(';'); vals = vals.map(function(v) { var num = parseLocaleFloat(v); - return isFinite(num) ? clamped(num) : v; + const fractionDigits = countDecimalPlaces(v); + return isFinite(num) ? clamped(num).toFixed(fractionDigits) : v; }); val = vals.join(';'); } @@ -429,9 +430,10 @@ export function uiFieldText(field, context) { var vals = val.split(';'); vals = vals.map(function(v) { v = v.trim(); - var num = parseFloat(v); + var num = Number(v); if (!isFinite(num)) return v; - return formatFloat(clamped(num)); + const fractionDigits = v.includes('.') ? v.split('.')[1].length : 0; + return formatFloat(clamped(num), fractionDigits); }); val = vals.join(';'); }