strconv: bug fix for "${239.5:0.0f}" (#13483)
parent
6d2a88e31f
commit
9c24d09dc3
|
@ -145,3 +145,86 @@ fn test_f32_eq_epsilon() {
|
|||
assert !e.eq_epsilon(y)
|
||||
assert !(-y).eq_epsilon(-e)
|
||||
}
|
||||
|
||||
fn test_float_point_formatting_rounding() {
|
||||
float_1 := 462.18
|
||||
float_2 := 45.02227
|
||||
float_3 := 238.5
|
||||
float_4 := 239.5
|
||||
|
||||
assert '${float_1:0.0f}' == '462'
|
||||
assert '${float_2:0.0f}' == '45'
|
||||
assert '${float_3:0.0f}' == '239'
|
||||
assert '${float_4:0.0f}' == '240'
|
||||
//
|
||||
//
|
||||
assert '${239.5555551:0.0f}' == '240'
|
||||
assert '${239.5555551:0.1f}' == '239.6'
|
||||
assert '${239.5555551:0.2f}' == '239.56'
|
||||
assert '${239.5555551:0.3f}' == '239.556'
|
||||
assert '${239.5555551:0.4f}' == '239.5556'
|
||||
assert '${239.5555551:0.5f}' == '239.55556'
|
||||
assert '${239.5555551:0.6f}' == '239.555555'
|
||||
assert '${239.5555551:0.7f}' == '239.5555551'
|
||||
assert '${239.5555551:0.8f}' == '239.55555510'
|
||||
assert '${239.5555551:0.9f}' == '239.555555100'
|
||||
assert '${239.5555551:0.10f}' == '239.5555551000'
|
||||
assert '${239.5555551:0.11f}' == '239.55555510000'
|
||||
//
|
||||
assert '${239.5:0.0f}' == '240'
|
||||
assert '${239.55:0.1f}' == '239.6'
|
||||
assert '${239.555:0.2f}' == '239.56'
|
||||
assert '${239.5555:0.3f}' == '239.555' // NB: 5 ?
|
||||
assert '${239.55555:0.4f}' == '239.5556'
|
||||
assert '${239.555555:0.5f}' == '239.55555' // NB: 5 ?
|
||||
assert '${239.5555555:0.6f}' == '239.555556' // after this, it is all ending in 6
|
||||
assert '${239.55555555:0.7f}' == '239.5555556'
|
||||
assert '${239.555555555:0.8f}' == '239.55555556'
|
||||
assert '${239.5555555555:0.9f}' == '239.555555556'
|
||||
assert '${239.55555555555:0.10f}' == '239.5555555556'
|
||||
//
|
||||
assert '${239.5550:0.3f}' == '239.555'
|
||||
assert '${239.5551:0.3f}' == '239.555'
|
||||
assert '${239.5552:0.3f}' == '239.555'
|
||||
assert '${239.5553:0.3f}' == '239.555'
|
||||
assert '${239.5554:0.3f}' == '239.555'
|
||||
assert '${239.5555:0.3f}' == '239.555'
|
||||
assert '${239.5556:0.3f}' == '239.556' // rounding at last 6 ?
|
||||
assert '${239.5557:0.3f}' == '239.556'
|
||||
assert '${239.5558:0.3f}' == '239.556'
|
||||
assert '${239.5559:0.3f}' == '239.556'
|
||||
//
|
||||
assert '${239.5555551:0.6f}' == '239.555555'
|
||||
assert '${239.5555552:0.6f}' == '239.555555'
|
||||
assert '${239.5555553:0.6f}' == '239.555555'
|
||||
assert '${239.5555554:0.6f}' == '239.555555'
|
||||
assert '${239.5555555:0.6f}' == '239.555556'
|
||||
assert '${239.5555556:0.6f}' == '239.555556'
|
||||
assert '${239.5555557:0.6f}' == '239.555556'
|
||||
assert '${239.5555558:0.6f}' == '239.555556'
|
||||
assert '${239.5555559:0.6f}' == '239.555556'
|
||||
//
|
||||
assert '${239.55555555555:0.10f}' == '239.5555555556'
|
||||
assert '${239.55555555555:0.9f}' == '239.555555556'
|
||||
assert '${239.55555555555:0.8f}' == '239.55555556'
|
||||
assert '${239.55555555555:0.7f}' == '239.5555556'
|
||||
assert '${239.55555555555:0.6f}' == '239.555556'
|
||||
assert '${239.55555555555:0.5f}' == '239.55556'
|
||||
assert '${239.55555555555:0.4f}' == '239.5556'
|
||||
assert '${239.55555555555:0.3f}' == '239.556'
|
||||
assert '${239.55555555555:0.2f}' == '239.56'
|
||||
assert '${239.55555555555:0.1f}' == '239.6'
|
||||
assert '${239.55555555555:0.0f}' == '240'
|
||||
//
|
||||
assert '${-239.55555555555:0.10f}' == '-239.5555555556'
|
||||
assert '${-239.55555555555:0.9f}' == '-239.555555556'
|
||||
assert '${-239.55555555555:0.8f}' == '-239.55555556'
|
||||
assert '${-239.55555555555:0.7f}' == '-239.5555556'
|
||||
assert '${-239.55555555555:0.6f}' == '-239.555556'
|
||||
assert '${-239.55555555555:0.5f}' == '-239.55556'
|
||||
assert '${-239.55555555555:0.4f}' == '-239.5556'
|
||||
assert '${-239.55555555555:0.3f}' == '-239.556'
|
||||
assert '${-239.55555555555:0.2f}' == '-239.56'
|
||||
assert '${-239.55555555555:0.1f}' == '-239.6'
|
||||
assert '${-239.55555555555:0.0f}' == '-240'
|
||||
}
|
||||
|
|
|
@ -156,7 +156,7 @@ pub fn f64_to_str_lnd1(f f64, dec_digit int) string {
|
|||
|
||||
mut dot_res_sp := -1
|
||||
|
||||
// get sign and deciaml parts
|
||||
// get sign and decimal parts
|
||||
for c in s {
|
||||
if c == `-` {
|
||||
sgn = -1
|
||||
|
@ -263,6 +263,10 @@ pub fn f64_to_str_lnd1(f f64, dec_digit int) string {
|
|||
|
||||
// no more digits needed, stop here
|
||||
if dec_digit <= 0 {
|
||||
// C.printf(c'f: %f, i: %d, res.data: %p | dot_res_sp: %d | *(res.data): %s \n', f, i, res.data, dot_res_sp, res.data)
|
||||
if dot_res_sp < 0 {
|
||||
dot_res_sp = i + 1
|
||||
}
|
||||
tmp_res := tos(res.data, dot_res_sp).clone()
|
||||
res.free()
|
||||
return tmp_res
|
||||
|
|
Loading…
Reference in New Issue