在Python中保留小数点后第一个数字

4

我希望Python能够做类似于MS Excel的功能:=ROUNDDOWN(number, num_digits)。因此在我的例子中,看起来像这样:

a = [3.5, 43.689, 113.225, 65.4545]

我尝试过这样做:
a = [3.5, 43.689, 113.225, 65.4545]
b = [str(i).split(".") for i in a]

c = [i[0] for i in b]
d = [i[1][0] for i in b]

e = list(zip(c,d))
f = [float(".".join(i)) for i in e]

我需要的输出是:
>>> print (f)
[3.5, 43.6, 113.2, 65.4]

有没有更好、更简单的方法在Python中完成上述任务?

1
https://dev59.com/uXA75IYBdhLWcg3wPmd8 - BENY
4个回答

3

跟你差不多的方法:

a = [3.5, 43.689, 113.225, 65.4545]
f = [float("{:.1f}".format(x)) for x in a]

无论如何,要记住您可以仅使用小数并使用其格式进行表示。 您可以使用数学中的floor函数对其进行转换,如下所示:
import math
f = [math.floor(x * 10)/10.0 for x in a]
print(f)

Here you have a live example.


ROUNDDOWN 总是向零舍入。 - cs95
@cᴏʟᴅsᴘᴇᴇᴅ,是的,我明白了。 - Netwave

2

我认为这是更符合Python风格的方法:

from decimal import Decimal, ROUND_DOWN
Decimal(65.4545).quantize(Decimal('.0'), rounding=ROUND_DOWN)

1

我认为您可以使用round表达式:

>>> a = [3.5, 43.689, 113.225, 65.4545]
>>> [float(Decimal(b).quantize(decimal.Decimal('.0'), rounding=decimal.ROUND_DOWN)) for b in a]
[3.5, 43.6, 113.2, 65.4]

我希望这可以帮助你 ;)

2
没有得到预期的结果。43.7 != 43.6 - Stop harming Monica

1

int向零舍入,如果这是你想要的:

a = [3.5, 43.689, 113.225, 65.4545]
[int(x * 10) / 10 for x in a]

输出:

[3.5, 43.6, 113.2, 65.4]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接