在Python中将string转换为带十进制的整数

我有一个在Python中的格式:'nn.nnnnn'的string,我想将其转换为一个整数。

直接转换失败:

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

但我宁愿把它作为一个整数,没有不必要的types转换或机动。

这个怎么样?

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

您不指定是否要四舍五入…

只有当您从一种数据types更改为另一种时,“转换”才有意义,而不失真实性。 由string表示的数字是一个浮点数,强制进入一个int将失去精度。

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

 round(float('23.45678')) 

如果要截断值,则其他人提到的expression式int(float(s))是最好的。 如果你想四舍五入,使用int(round(float(s))如果圆形algorithm匹配你想要的(参见圆形文档 ),否则你应该使用Decimal和一个,如果其舍入algorithm。

你可以使用:

 s = '23.245678' i = int(float(s)) 
 round(float("123.789")) 

会给你一个整数值,但是一个浮点types。 然而,用Python的鸭子打字,实际的types通常不是很相关。 这也将围绕你可能不想要的价值。 将'round'replace为'int',你将会把它截断,并得到一个实际的int值。 喜欢这个:

 int(float("123.789")) 

但是,实际的“types”通常并不重要。