我有一个格式的字符串: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,没有不必要的类型转换或操纵。
答案 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"))
但是,实际的'类型'通常并不那么重要。