Skip to content

Commit 129ea22

Browse files
authored
strconv: fix float scientific notation (fix #26045) (#26046)
1 parent 957212d commit 129ea22

3 files changed

Lines changed: 22 additions & 22 deletions

File tree

‎vlib/strconv/f32_f64_to_string_test.v‎

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,17 @@ fn test_float_to_str() {
6363
'nan',
6464
'+inf',
6565
'-inf',
66-
'1.e+00',
67-
'-1.e+00',
68-
'1.e+01',
69-
'-1.e+01',
70-
'3.e-01',
71-
'-3.e-01',
72-
'1.e+06',
66+
'1e+00',
67+
'-1e+00',
68+
'1e+01',
69+
'-1e+01',
70+
'3e-01',
71+
'-3e-01',
72+
'1e+06',
7373
'1.234567e+05',
7474
'1.23e+37',
7575
'-1.2345e+02',
76-
'1.e+23',
76+
'1e+23',
7777
'1.1754944e-38', // aprox from 1.1754943508 × 10−38,
7878
'3.4028235e+38',
7979
'3.8326058e+17',
@@ -115,25 +115,25 @@ fn test_float_to_str() {
115115
'nan',
116116
'+inf',
117117
'-inf',
118-
'1.e+00',
119-
'-1.e+00',
120-
'1.e+01',
121-
'-1.e+01',
122-
'3.e-01',
123-
'-3.e-01',
124-
'1.e+06',
118+
'1e+00',
119+
'-1e+00',
120+
'1e+01',
121+
'-1e+01',
122+
'3e-01',
123+
'-3e-01',
124+
'1e+06',
125125
'1.234567e+05',
126126
'1.23e+47',
127127
'-1.2345e+02',
128-
'1.e+23',
128+
'1e+23',
129129
'2.2250738585072014e-308',
130130
'3.4028234663852886e+38',
131131
'3.8326057576481645e+17',
132132
'3.8326057576481645e+17',
133133
'1.23e+302', // this test is failed from C sprintf!!
134134
'1.23e-298',
135-
'5.e-324',
136-
'-5.e-324',
135+
'5e-324',
136+
'-5e-324',
137137
]
138138

139139
// test f32

‎vlib/strconv/f32_str.c.v‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,11 @@ pub fn (d Dec32) get_string_32(neg bool, i_n_digit int, i_pad_digit int) string
101101
}
102102
}
103103

104-
if out_len >= 1 {
104+
if out_len > 1 || fw_zeros > 0 {
105105
buf[y - x] = `.`
106-
x++
107106
i++
108107
}
108+
x++
109109

110110
if y - x >= 0 {
111111
buf[y - x] = `0` + u8(out % 10)

‎vlib/strconv/f64_str.c.v‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ fn (d Dec64) get_string_64(neg bool, i_n_digit int, i_pad_digit int) string {
8686
// }
8787
//}
8888

89-
if out_len >= 1 {
89+
if out_len > 1 || fw_zeros > 0 {
9090
buf[y - x] = `.`
91-
x++
9291
i++
9392
}
93+
x++
9494

9595
if y - x >= 0 {
9696
buf[y - x] = `0` + u8(out % 10)

0 commit comments

Comments
 (0)