繁体   English   中英

在Python中将字符串转换为带十进制的整数

[英]Convert a string to integer with decimal in Python

我有一个格式为 Python 的字符串:'nn.nnnnn',我想将其转换为整数。

直接转换失败:

>>> s = '23.45678'
>>> i = int(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '23.45678'

我可以使用以下方法将其转换为小数:

>>> from decimal import *
>>> d = Decimal(s)
>>> print d
23.45678

我也可以在 '.' 上拆分,然后从零中减去小数,然后将其添加到整数中......哎呀。

但我更喜欢将它作为一个 int,没有不必要的类型转换或操作。

这个怎么样?

>>> s = '23.45678'
>>> int(float(s))
23

或者...

>>> int(Decimal(s))
23

或者...

>>> int(s.split('.')[0])
23

我怀疑它会变得比那简单得多,恐怕。 接受它并继续前进。

你想要什么样的舍入行为? 你把2.67变成3,还是2。如果你想用四舍五入,试试这个:

s = '234.67'
i = int(round(float(s)))

否则,只需执行以下操作:

s = '234.67'
i = int(float(s))
>>> s = '23.45678'
>>> int(float(s))
23
>>> int(round(float(s)))
23
>>> s = '23.54678'
>>> int(float(s))
23
>>> int(round(float(s)))
24

您没有指定是否要舍入...

你可以使用:

s = '23.245678'
i = int(float(s))

“转换”仅在您从一种数据类型更改为另一种数据类型而不会丢失保真度时才有意义。 字符串表示的数字是一个浮点数,在被强制转换为 int 时会失去精度。

您可能想要四舍五入(我希望数字不代表货币,因为这样四舍五入会变得更加复杂)。

round(float('23.45678'))

如果要截断值,其他人提到的表达式int(float(s))是最好的。 如果您想要舍入,则使用int(round(float(s))如果舍入算法与您想要的匹配(请参阅舍入文档),否则您应该使用Decimal和一个如果其舍入算法。

round(float("123.789"))

会给你一个整数值,但一个浮点类型。 然而,对于 Python 的鸭子类型,实际的类型通常不是很相关。 这也会舍入您可能不想要的值。 将 'round' 替换为 'int',您将只截断它并得到一个实际的 int。 像这样:

int(float("123.789"))

但是,同样,实际的“类型”通常并不那么重要。

我相信这是一个无用的错误,应该在 Python 中纠正。

int('2') --> 2 将字符串 '2' 转换为整数 2。

int(2.7) --> 2 将 float 转换为 int。

int('2.7')应该转换为 2。例如,这就是 Perl 的工作方式。 是的,这一次做了两件事。 它转换字符串,当它发现它是一个浮点数表示时,它应该转换为 int。

否则,为什么坚持float('2')应该工作? 它是一个整数字符串,因为没有小数点。 所以它必须从一个整数的字符串直接转换为浮点数。

我不知道,但也许有人可以回答 python 解释器是否使用了所需的int(float(x)) ,如果它实际上经历了首先转换为 float 然后转换为 int 的过程。 这将使这个错误更加重要,需要更正。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM