decimal icon indicating copy to clipboard operation
decimal copied to clipboard

Incorrect string formatting when rounding up to include additional digit

Open jstol opened this issue 2 years ago • 3 comments

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!

jstol avatar May 06 '22 00:05 jstol

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. :-(

lotodore avatar Sep 28 '22 08:09 lotodore

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.

lotodore avatar Sep 28 '22 09:09 lotodore