diff --git a/packages/localize/src/number/forceAddGroupSeparators.js b/packages/localize/src/number/forceAddGroupSeparators.js index dd00427e3..ae198871c 100644 --- a/packages/localize/src/number/forceAddGroupSeparators.js +++ b/packages/localize/src/number/forceAddGroupSeparators.js @@ -7,9 +7,17 @@ */ export function forceAddGroupSeparators(formattedParts, groupSeparator) { let concatArray = []; - if (formattedParts[0].type === 'integer') { - const getInteger = formattedParts.splice(0, 1); - const numberOfDigits = getInteger[0].value.length; + let firstPart; + let integerPart; + + for (let i = 0; i < formattedParts.length; i += 1) { + if (formattedParts[i].type === 'integer') { + firstPart = formattedParts.splice(0, i); + integerPart = formattedParts.splice(0, 1); + } + } + if (integerPart !== undefined) { + const numberOfDigits = integerPart[0].value.length; const mod3 = numberOfDigits % 3; const groups = Math.floor(numberOfDigits / 3); const numberArray = []; @@ -18,7 +26,7 @@ export function forceAddGroupSeparators(formattedParts, groupSeparator) { let firstGroup = false; // Loop through the integer for (let i = 0; i < numberOfDigits; i += 1) { - numberPart += getInteger[0].value[i]; + numberPart += integerPart[0].value[i]; // Create first grouping which is < 3 if (numberPart.length === mod3 && firstGroup === false) { numberArray.push({ type: 'integer', value: numberPart }); @@ -38,7 +46,7 @@ export function forceAddGroupSeparators(formattedParts, groupSeparator) { } } numberArray.push({ type: 'integer', value: numberPart }); - concatArray = numberArray.concat(formattedParts); + concatArray = firstPart.concat(numberArray, formattedParts); } return concatArray; } diff --git a/packages/localize/test/number/formatNumber.test.js b/packages/localize/test/number/formatNumber.test.js index 03c817a64..ca6dfe752 100644 --- a/packages/localize/test/number/formatNumber.test.js +++ b/packages/localize/test/number/formatNumber.test.js @@ -291,6 +291,7 @@ describe('formatNumber', () => { localize.locale = 'bg-BG'; expect(formatNumber(1.234, currencyCode('EUR'))).to.equal('1,23 EUR'); expect(formatNumber(1234.567, currencyCode('EUR'))).to.equal('1 234,57 EUR'); + expect(formatNumber(-1234.567, currencyCode('EUR'))).to.equal('−1 234,57 EUR'); }); });