decimal
decimal copied to clipboard
Incorrect string formatting when rounding up to include additional digit
I've run into some strange behaviour when converting values to strings that require rounding up. For example, see the code snippet below:
var b decimal.Big
b.SetString("9.996208266660")
fmt.Println(fmt.Sprintf("%.2f", &b)) // Should be 10.00, but is 1.000
b.SetString("0.9996208266660")
fmt.Println(fmt.Sprintf("%.2f", &b)) // Should be 1.00, but is 0.100
Other values appear to be fine – this appears to only happen when rounding up to include an additional digit, almost as if the decimal point is being outputted 1 position left from where it should be. Any idea why this may be happening? More examples can be found here. Thanks!
I just noted I'm also having this issue and it seems like a serious problem. Rounding up to include an additional digit happens all the time and causes some really strange effects on the UI. :-(
Workaround, use Quantize
on a copy:
var b decimal.Big
b.SetString("9.996208266660")
fmt.Println(fmt.Sprintf("%.2f", new(decimal.Big).Copy(&b).Quantize(2)))
But I really think this should be fixed.