2009-07-07 34 views
41

我在Python中有一个格式为'nn.nnnnn'的字符串,我想将它转换为整数。将字符串转换为Python中的十进制整数

直接转换失败:

>>> 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 

我也可以拆分,然后从零减去小数,再加入那整个号码......哎呀。

但我更喜欢把它作为一个整型,没有不必要的类型转换或机动。

+10

Matt,23.45678不是整数。如果你想Python将一个字符串转换为一个整数,确保你给它一个整数。对于什么是“正确”的事情,可以采取任何方式进行争论,最终有人会不高兴。 – Christopher 2009-07-07 20:49:02

回答

88

这个怎么样?

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

或者......

>>> int(Decimal(s)) 
23 

或者......

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

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

+3

记得'进口小数',然后用它作为'decimal.Decimal(5)`或者做`从十进制小数进口小数',并用它作为'十进制(5)`。我总是忘记。 – teewuane 2015-04-28 00:42:34

1

你可以使用:

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

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

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

否则,只是做:

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

“转换”只有当你从改变是有道理的一种数据类型到另一种数据类型而不失真实性。由字符串表示的数字是一个浮点数,在被强制为一个int时将失去精度。

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

round(float('23.45678')) 
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 

,如果你想圆或不是你不指定...

0
round(float("123.789")) 

会给你一个整数值,而是一个float类型。但是,使用Python的鸭子输入法,实际的类型通常并不相关。这也将围绕您可能不想要的价值。将'round'替换为'int',并且您将它截断并得到一个实际的int。像这样:

int(float("123.789")) 

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

1

其他人提到的表达int(float(s))是最好的,如果你想截断值。如果要四舍五入,则使用(如果轮次算法与您想要的匹配)(请参阅round documentation),否则应使用Decimal,如果舍入算法为1则。

相关问题