【问题标题】:Rounding very large numbers in Python (left of the decimal) [duplicate]在Python中舍入非常大的数字(小数点左侧)[重复]
【发布时间】:2016-06-03 01:08:25
【问题描述】:

理论上,Python round() 函数会将负数四舍五入到小数点左侧。 [ IE。回合(150,-2)=> 200]

但是,它似乎很容易出现浮点错误。

例如,给定一个大数 2e25,它会给出奇怪的结果。

2e25 === 20000000000000000000000000

但是,round(2e25, -23) 给出的值类似于 20000000000000000273942742

当它应该刚刚得到 20000000000000000000000000 时

我知道有一个格式化功能,就像这个线程: round() in Python doesn't seem to be rounding properly

但是,这似乎只适用于小数点右侧的舍入。我错了吗?还有另一种方法可以做到这一点吗?试图正确计算数学非常令人沮丧。

谢谢!

【问题讨论】:

    标签: python rounding


    【解决方案1】:

    问题在于 2e25 实际上并不等于 20000000000000000000000000。

    >>> 2e25 == 20000000000000000000000000
    False
    >>> 2e25 == 20000000000000001811939328
    True
    

    float 类型没有足够的精度来准确表示这么大的整数。除非您有充分的理由使用浮点值,否则请改用整数。

    【讨论】:

      猜你喜欢
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 2011-08-25
      相关资源
      最近更新 更多