From 307e5330619eba7b51c4abdd63e6f458bfb70bd6 Mon Sep 17 00:00:00 2001 From: wxy <2498871854@qq.com> Date: Fri, 12 Jul 2024 08:07:19 +0800 Subject: [PATCH] This closes #1942, fix percent sign missing in formatted result for zero numeric cell value (#1947) - Updated unit tests --- numfmt.go | 32 +++++++++++--------------------- numfmt_test.go | 5 ++++- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/numfmt.go b/numfmt.go index 47f2d4a..319229f 100644 --- a/numfmt.go +++ b/numfmt.go @@ -4799,10 +4799,8 @@ func format(value, numFmt string, date1904 bool, cellType CellType, opts *Option switch section.Type { case nfp.TokenSectionPositive: return nf.alignmentHandler(nf.positiveHandler()) - case nfp.TokenSectionNegative: - return nf.alignmentHandler(nf.negativeHandler()) default: - return nf.alignmentHandler(nf.zeroHandler()) + return nf.alignmentHandler(nf.negativeHandler()) } } return nf.alignmentHandler(nf.textHandler()) @@ -7108,11 +7106,6 @@ func (nf *numberFormat) negativeHandler() (result string) { return nf.numberHandler() } -// zeroHandler will be handling zero selection for a number format expression. -func (nf *numberFormat) zeroHandler() string { - return nf.value -} - // textHandler will be handling text selection for a number format expression. func (nf *numberFormat) textHandler() (result string) { for _, token := range nf.section[nf.sectionIdx].Items { @@ -7137,21 +7130,18 @@ func (nf *numberFormat) getValueSectionType(value string) (float64, string) { return 0, nfp.TokenSectionText } number, _ := strconv.ParseFloat(value, 64) - if number > 0 { + if number >= 0 { return number, nfp.TokenSectionPositive } - if number < 0 { - var hasNeg bool - for _, sec := range nf.section { - if sec.Type == nfp.TokenSectionNegative { - hasNeg = true - } + var hasNeg bool + for _, sec := range nf.section { + if sec.Type == nfp.TokenSectionNegative { + hasNeg = true } - if !hasNeg { - nf.usePositive = true - return number, nfp.TokenSectionPositive - } - return number, nfp.TokenSectionNegative } - return number, nfp.TokenSectionZero + if !hasNeg { + nf.usePositive = true + return number, nfp.TokenSectionPositive + } + return number, nfp.TokenSectionNegative } diff --git a/numfmt_test.go b/numfmt_test.go index 49e4fa0..9e59fb2 100644 --- a/numfmt_test.go +++ b/numfmt_test.go @@ -69,7 +69,10 @@ func TestNumFmt(t *testing.T) { {"0.97952546296296295", "h:m", "23:30"}, {"43528", "mmmm", "March"}, {"43528", "dddd", "Monday"}, - {"0", ";;;", "0"}, + {"0", ";;;", ""}, + {"0", "0%", "0%"}, + {"0", "0.0%", "0.0%"}, + {"0", "0.00%", "0.00%"}, {"43528", "[$-409]MM/DD/YYYY", "03/04/2019"}, {"43528", "[$-409]MM/DD/YYYY am/pm", "03/04/2019 AM"}, {"43528", "[$-111]MM/DD/YYYY", "43528"},