为什么 round() 在指数数上不能按预期工作?

Why doesn't round() work as expected on exponential numbers?

格式化数字有效并减少不需要的小数。 round() 函数给出与参数传递的相同值是否有原因?

number = 5.7821323121209e19
print(round(number,2)) # 5.7821323121209e19.
# Works.
print('%.3g' % number) # 5.78e19
print('{:.3g}'.format(number))  # 5.78e19
print(f'{number:.3g}')   # 5.78e19

round(number, 2) 四舍五入到小数点后两位(即百分之一)。 5.7821323121209e19 太大以至于没有任何效果。是57821323121209000000.

一切正常。 5.7821323121209e19 实际上是 5.7821323121209 * (10 ** 19) 所以它是一个数字,逗号后只有 0

因此从数学的角度来看没有什么要四舍五入的。

看起来你想要 -17 而不是 2:

>>> round(5.7821323121208e19, -17)
5.78e+19