I am having difficulty converting a float to string in the following manner:
20.02 --> 20.02
20.016 --> 20.02
20.0 --> 20
It seems that%g
format is the best for that, but I am getting strange results:
In [30]: "%.2g" % 20.03
Out[30]: 20
In [31]: "%.2g" % 20.1
Out[31]: 20
In [32]: "%.2g" % 20.3
Out[32]: 20
In [33]: "%.2g" % 1.2
Out[33]: 1.2
In [34]: "%.2g" % 1.0
Out[34]: 1
In [35]: "%.2g" % 2.0
Out[35]: 2
In [36]: "%.2g" % 2.2
Out[36]: 2.2
In [37]: "%.2g" % 2.25
Out[37]: 2.2
In [38]: "%.2g" % 2.26
Out[38]: 2.3
In [39]: "%.3g" % 2.26
Out[39]: 2.26
In [40]: "%.3g" % 2.25
Out[40]: 2.25
In [41]: "%.3g" % 20.02
Out[41]: 20
In [42]: "%.3g" % 20.016
Out[42]: 20
In [43]: "%.20g" % 20.016
Out[43]: 20.015999999999998238
The only solution I know at the moment is checking whether the number is an int
and applying %d
instead of %f
formatting - this is too complicated, I think.
Does anybody know why the things above are hapenning? How to do this in a simpler way?
Thanks.