From 087ac07a14fd19f4c4b0d66cee686dce53de78a9 Mon Sep 17 00:00:00 2001 From: John Date: Sat, 16 Jan 2021 19:08:52 +0800 Subject: [PATCH] refactor(utils): enhanced number formatter (#7921) --- src/utils/format/number.ts | 9 ++++++++- src/utils/test/index.spec.js | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/utils/format/number.ts b/src/utils/format/number.ts index 79317a359..bd7bae161 100644 --- a/src/utils/format/number.ts +++ b/src/utils/format/number.ts @@ -4,6 +4,7 @@ export function range(num: number, min: number, max: number): number { function trimExtraChar(value: string, char: string, regExp: RegExp) { const index = value.indexOf(char); + let prefix = ''; if (index === -1) { return value; @@ -13,7 +14,13 @@ function trimExtraChar(value: string, char: string, regExp: RegExp) { return value.slice(0, index); } - return value.slice(0, index + 1) + value.slice(index).replace(regExp, ''); + if (char === '.' && value.match(/^(\.|-\.)/)) { + prefix = index ? '-0' : '0'; + } + + return ( + prefix + value.slice(0, index + 1) + value.slice(index).replace(regExp, '') + ); } export function formatNumber( diff --git a/src/utils/test/index.spec.js b/src/utils/test/index.spec.js index eb263eaa2..86b54980a 100644 --- a/src/utils/test/index.spec.js +++ b/src/utils/test/index.spec.js @@ -116,6 +116,10 @@ test('formatNumber', () => { expect(formatNumber('-1.2', true)).toEqual('-1.2'); expect(formatNumber('-1.2-', true)).toEqual('-1.2'); expect(formatNumber('123-')).toEqual('123'); + + // special cases + expect(formatNumber('.1', true)).toEqual('0.1'); + expect(formatNumber('-.1')).toEqual('-0.1'); }); test('addUnit', () => {