在Python中将字符串转换为带小数的整数

时间:2009-07-07 20:35:48

标签: python string integer decimal

我有一个格式的字符串: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

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

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

7 个答案:

答案 0 :(得分:101)

这个怎么样?

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

或者...

>>> int(Decimal(s))
23

或者...

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

我怀疑它会比这简单得多,我很害怕。接受它并继续前进。

答案 1 :(得分:13)

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

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

否则,只需:

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

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

你想要反绕,可能(我希望这些数字不代表货币,因为这样会使得舍入变得更加复杂)。

round(float('23.45678'))

答案 4 :(得分:1)

您可以使用:

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

round(float("123.789"))

会给你一个整数值,但是浮点类型。但是,使用Python的鸭子类型,实际类型通常不是很相关。这也会使您可能不需要的值四舍五入。将'round'替换为'int',你将只是截断它和实际的int。像这样:

int(float("123.789"))

但是,实际的'类型'通常并不那么重要。