【问题标题】:why I get error when using int() function to convert float to integer?为什么在使用 int() 函数将浮点数转换为整数时出现错误?
【发布时间】:2019-06-21 00:55:47
【问题描述】:

当我尝试使用 int() 函数将浮点数转换为整数时,为什么会出错?

>>> int('99.99')
Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    int('99.99')
ValueError: invalid literal for int() with base 10: '99.99'

我预计结果是 99

【问题讨论】:

  • 您不是在转换浮点数,而是在转换字符串。
  • 您没有将浮点数转换为整数;您正在尝试转换包含浮点文字的字符串。本着“显式优于隐式”的精神,int 不会尝试隐式地从字符串到浮点数到 int。如果您想这样做,请明确:int(float('99.99')).
  • 这应该可以得到你想要的 int(float('99.99'))
  • 您正在从 string 转换为 int,它失败了,因为 python 不希望 int 中有一个点。试试round(float('99.99))。也许看看Math.floor/ceil,这取决于你希望它如何对你的数字进行四舍五入。

标签: python


【解决方案1】:

您的参数不是浮点数,它是一个包含浮点数表示的字符串。您必须先将其转换为浮点数,然后才能将其转换为 int。

int(float('99.99'))

【讨论】:

  • 谢谢,为什么我可以使用:int('100') 得到 100
  • 因为100是一个整数。
  • int() 会将字符串转换为整数,如果它包含整数的表示形式。如果小数点后有数字,则不是有效整数。
【解决方案2】:

根据docs

返回由数字或字符串 x 构造的整数对象,或 如果没有给出参数,则返回 0。如果 x 是数字,则返回 x.int()。对于浮点数,这将截断为零。

如果 x 不是一个数字或者如果给出了基数,那么 x 必须是一个字符串, 字节,或 bytearray 实例,表示基数中的整数文字 基地。

特别注意“表示整数文字”。因此,您尝试转换的 str 不能是浮点数,因为这是浮点文字,而不是 int 文字。

因此,正如其他人所指出的,您不能直接从浮点文字转到 int,您需要先转换 float

x = '123.45'

int(float(x))

【讨论】:

    【解决方案3】:

    您收到 ValueError 是因为您使用与 Python 文档不一致的参数重载了 int()

    根据文档:

    "如果 x 不是一个数字或者如果给出了 base,那么 x 必须是一个字符串或者 表示整数文字的 Unicode 对象“

    基本上,x(在您的情况下为 '99.99')是字符串 99.99,它不满足作为整数文字的要求。您提供了一个浮动文字。

    TL;DR

    int(float('99.99'))
    

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      相关资源
      最近更新 更多