【问题标题】:Typecasting to 'int' in Python generating wrong result在 Python 中将类型转换为“int”会产生错误的结果
【发布时间】:2015-10-31 05:14:53
【问题描述】:

我尝试在 Python 3.3 中执行以下类型转换操作

int(10**23 / 10)

输出:10000000000000000000000

在功率增加一倍或更多之后

int(10**24 / 10)

输出:99999999999999991611392

int(10**25 / 10)

输出:999999999999999983222784

为什么会这样?虽然像

这样的简单类型转换

int(10**24)

输出:1000000000000000000000000

不影响值。

【问题讨论】:

  • 没有类型转换,只有转换。请改用// 来获取楼层除法,并避免创建浮点数(这是您的错误的来源)。

标签: python python-3.x int division


【解决方案1】:

在 Python 3.x 中,/ 总是执行真(浮点)除法。使用地板除法// 可以得到预期的结果。

>>> int(10**25 // 10)
1000000000000000000000000

这种行为的原因是float 不能精确地存储大整数。

假设使用IEEE-754双精度,它最多可以精确存储253个整数,大约是1016。另一个例子:

>>> int(10**17 / 10 + 1)
10000000000000000

【讨论】:

    【解决方案2】:

    您正在使用 / 运算符进行浮点除法。 10**24/10 恰好有一个不精确的整数表示。

    如果您需要整数结果,请用 // 除。

    >>> type(10**24/10)
    <class 'float'>
    >>> type(10**24//10)
    <class 'int'>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 2016-04-21
      • 1970-01-01
      相关资源
      最近更新 更多