首页 > 解决方案 > 在 Python 中舍入一个数字

问题描述

我有一个非常简单的问题。我想将间隔从1e-6to10e-6分成十个值并将它们附加到列表中。出于这个原因,我制作了下面的程序,

start_value = 1e-6
stop_value = 10e-6
step_value = 10
step = (stop_value-start_value)/(step_value-9)

current_list = [start_value]
last_value = start_value

for i in range(step_value-1):
    current_list.append(last_value + step)
    last_value = last_value + step

print(current_list)

我得到以下结果,

[1e-06, 2e-06, 3e-06, 4e-06, 4.9999999999999996e-06, 5.999999999999999e-06, 6.999999999999999e-06, 8e-06, 9e-06, 1e-05].

当然,数字4.999999999e-66.999999999e-6应该是 5e-067e-06分别。为此,我使用了该round(**number** ,11)方法。

start_value = 1e-6
stop_value = 10e-6
step_value = 10
step = (stop_value-start_value)/(step_value-9)

current_list = [start_value]
last_value = start_value

for i in range(step_value-1):
    current_list.append(round(last_value + step, 11))
    last_value = last_value + step

print(current_list)

还有其他方法可以做到这一点吗?

标签: pythonpython-3.x

解决方案


你可以看看这个fractions模块:

import fractions


start_value = fractions.Fraction(1, 1000000)
stop_value = fractions.Fraction(10, 1000000)
step_value = 10
step = fractions.Fraction(stop_value-start_value, (step_value - 1))

current_list = []

for i in range(step_value):
    current_list.append(start_value + i * step)

默认输出维护一个Fraction类型列表:

print(current_list)

[Fraction(1, 1000000), Fraction(1, 500000), Fraction(3, 1000000), Fraction(1, 250000), Fraction(1, 200000), Fraction(3, 500000), Fraction(7, 1000000), Fraction(1, 125000), Fraction(9, 1000000), Fraction(1, 100000)]

但是转换为原生数据类型很简单:

print([float(x) for x in current_list])

[1e-06, 2e-06, 3e-06, 4e-06, 5e-06, 6e-06, 7e-06, 8e-06, 9e-06, 1e-05]

推荐阅读