在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”通常并不重要。