为什么python格式的函数四舍五入某些数字而不是其他数字


>>> "{: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

相关内容

最新更新