gpt4 book ai didi

python - Round 在 Python 中向下 float 以仅保留一位非零小数

转载 作者:太空狗 更新时间:2023-10-29 21:39:28 25 4
gpt4 key购买 nike

我有一个只用 float 填充的 Python 列表:

list_num = [0.41, 0.093, 0.002, 1.59, 0.0079, 0.080, 0.375]

我需要将此列表四舍五入以获得:

list_num_rounded = [0.4, 0.09, 0.002, 1.5, 0.007, 0.08, 0.3]

问题:将 1.59 四舍五入到 1.5 很容易做到。但是,我的问题是 float 小于 1。

问题:基本上,我需要将所有 float 向下舍入,以便:如果 float < 1,则四舍五入后的版本仅包含一个非零数字。有没有办法在 Python 2.7 中执行此操作?

尝试:这是我尝试过的:

list_num_rounded = []
for elem in list_num:
if elem > 0.01 and elem < 0.1:
list_num_rounded.append(round(elem,2))
if elem > 0.001 and elem < 0.01:
list_num_rounded.append(round(elem,3))
elif elem > 0.1:
list_num_rounded.append(round(elem,1))

然而,这给出了:

[0.4, 0.09, 0.002, 1.6, 0.008, 0.08, 0.4]

它向上舍入 1.59、0.79 和 0.375,但我需要一种只向下舍入的方法。有办法做到这一点吗?

该列表将不包含负 float 。只会出现正 float 。

最佳答案

您可以使用对数计算出有多少个前导零,然后您需要一种向下舍入的方法。一种方法是像这样使用 floor:

import math

list_num = [0.41, 0.093, 0.002, 1.59, 0.0079, 0.080, 0.375, 0, 10.1, -0.061]


def myround(n):
if n == 0:
return 0
sgn = -1 if n < 0 else 1
scale = int(-math.floor(math.log10(abs(n))))
if scale <= 0:
scale = 1
factor = 10**scale
return sgn*math.floor(abs(n)*factor)/factor


print [myround(x) for x in list_num]

输出:

[0.4, 0.09, 0.002, 1.5, 0.007, 0.08, 0.3]

我不确定您要如何处理负数和大于 1 的数字,这会将负数和大于 1 的数字四舍五入到 1dp。

关于python - Round 在 Python 中向下 float 以仅保留一位非零小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32812255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com