>>> "{:g}".format(float(214929)/2)
'107464'
>>> "{:g}".format(float(105793)/2)
'52896.5'
我正在尝试用十进制格式打印小数字,用科学记数法打印大数字。
为什么格式化函数将某些浮点除法舍入为最接近的整数,而不是其他整数?我在这里错过了什么?我试过2号和3号蟒蛇。
"g";格式说明符默认四舍五入到6个有效数字。
https://python-reference.readthedocs.io/en/latest/docs/str/formatting.html
由于您有更复杂的需求(小数表示小,科学表示大(,您可能需要对浮点进行子类化,以更严格地控制其输出表示。
一个例子:
class MyF(float):
def __init__(self, x, dec=2, tos=1e6):
self.val=float(x)
self.dec=dec
self.tos=tos
def __repr__(self):
if abs(self.val)>self.tos:
return f"{self.val:g}"
return f"{self.val:,.2f}"
测试:
cases=(float(214929)/2, float(105793)/2, 123456789/2, 1)
for e in cases:
print(f"{e:12} {e:12g}t", MyF(e))
打印:
107464.5 107464 107,464.50
52896.5 52896.5 52,896.50
61728394.5 6.17284e+07 6.17284e+07
1 1 1.00