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

问题描述 投票:0回答:9

我有一个 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

我也可以拆分“.”,然后从零减去小数,然后将其添加到整数......恶心。

但我更喜欢将其作为 int,而不进行不必要的类型转换或操作。

python string integer decimal
9个回答
147
投票

这个怎么样?

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

或者...

>>> int(Decimal(s))
23

或者...

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

恐怕事情会变得比这简单得多。接受它并继续前进。


16
投票

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

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

否则,只需执行:

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

4
投票
>>> 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
投票

您可以使用:

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

2
投票

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

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

round(float('23.45678'))

1
投票

如果要截断值,其他人提到的表达式

int(float(s))
是最好的。如果您想要四舍五入,如果舍入算法与您想要的匹配,请使用
int(round(float(s))
(请参阅 round 文档),否则您应该使用
Decimal
,如果其舍入算法则应使用 1。


0
投票
round(float("123.789"))

会给你一个整数值,但是是浮点类型。然而,对于 Python 的鸭子类型,实际类型通常不是很相关。这也会对值进行四舍五入,这可能是您不想要的。将“round”替换为“int”,您将得到它的截断值和实际的 int。像这样:

int(float("123.789"))

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


0
投票

我相信这是一个无用的错误,应该在 Python 中纠正。

int('2')
--> 2 将字符串 '2' 转换为整数 2。

int(2.7)
--> 2 将 float 转换为 int。

int('2.7')
应转换为 2。例如,这就是 Perl 的工作原理。是的,这同时做了两件事。它转换字符串,当它发现它是浮点表示形式时,它应该转换为 int。

否则,为什么坚持

float('2')
应该有效?它是一个整数字符串,因为没有小数点。所以它必须从整数字符串直接转换为浮点数。

我不知道,但也许有人可以回答python解释器是否使用了所需的

int(float(x))
,是否确实经历了先转换为float,然后转换为int的过程。这将使这个错误变得更加需要纠正。


0
投票

А что так можно было? s = '23.45678' i = 浮点数 打印(一) 出去: 23.45678 这可能吗?

© www.soinside.com 2019 - 2024. All rights reserved.