Skip to content

Commit 6768429

Browse files
committed
fix #36562
1 parent b3d2133 commit 6768429

File tree

2 files changed

+9
-10
lines changed

2 files changed

+9
-10
lines changed

src/fmt/fmt_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,7 @@ var fmtTests = []struct {
471471
{"%#.4g", 0.12, "0.1200"},
472472
{"%#.4g", 10.2, "10.20"},
473473
{"%#.4g", 0.0, "0.0000"},
474+
{"%#.4g",0.012,"0.01200"},
474475
{"%#.0f", 123.0, "123."},
475476
{"%#.0e", 123.0, "1.e+02"},
476477
{"%#.0x", 123.0, "0x1.p+07"},

src/fmt/format.go

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -536,16 +536,12 @@ func (f *fmt) fmtFloat(v float64, size int, verb rune, prec int) {
536536
tail := tailBuf[:0]
537537

538538
hasDecimalPoint := false
539+
meetNonzeroDigit := false
539540
// Starting from i = 1 to skip sign at num[0].
540541
for i := 1; i < len(num); i++ {
541542
switch num[i] {
542543
case '.':
543544
hasDecimalPoint = true
544-
// The sharp flag keeps trailing zeros, but a leading 0 (0.xxx)
545-
// should not contribute to the zero count.
546-
if num[i-1] == '0' && (num[i-2] < '0' || '9' < num[i-2]) {
547-
digits++
548-
}
549545
case 'p', 'P':
550546
tail = append(tail, num[i:]...)
551547
num = num[:i]
@@ -557,14 +553,16 @@ func (f *fmt) fmtFloat(v float64, size int, verb rune, prec int) {
557553
}
558554
fallthrough
559555
default:
560-
digits--
556+
if num[i] != '0' {
557+
meetNonzeroDigit = true
558+
}
559+
// Count significant digits after meeting first non-zero digit
560+
if meetNonzeroDigit {
561+
digits--
562+
}
561563
}
562564
}
563565
if !hasDecimalPoint {
564-
// See comment for '.' above.
565-
if num[1] == '0' && len(num) == 2 {
566-
digits++
567-
}
568566
num = append(num, '.')
569567
}
570568
for digits > 0 {

0 commit comments

Comments
 (0)