函数生成十进制类型数字列表的结果不同

时间:2019-01-30 16:05:30

标签: python decimal

对于此任务:使用step=0.5生成2到5.5的数字列表,结果数据必须为Decimal类型。

我写了两个函数,不知道为什么结果不同(例如Decimal('4')和 十进制('4.0'))。

代码是用 Python 3.5 编写的。

以下是功能:

def generate_decimals(begin=2.0, end=5.5, step=0.5):
    nums_list = list(arange(begin, end + step, step))
    return [Decimal(number) for number in nums_list]


def generate_decimals2(begin=2.0, end=5.5, step=0.5):
    decimals = []
    num = Decimal(begin)
    while num <= end:
        decimals.append(num)
        num += Decimal(step)
    return decimals

generate_decimals()的结果:

[Decimal('2'), Decimal('2.5'), Decimal('3'), Decimal('3.5'), Decimal('4'), Decimal('4.5'), Decimal('5'), Decimal('5.5')]

generate_decimals2()的结果:

[Decimal('2'), Decimal('2.5'), Decimal('3.0'), Decimal('3.5'), Decimal('4.0'), Decimal('4.5'), Decimal('5.0'), Decimal('5.5')]

这些结果之一比其他结果更合适吗?

2 个答案:

答案 0 :(得分:1)

在添加int之后的第二种情况下(从float0.5)隐式强制转换结果。

在第一种情况下,如果需要,例如,将每个数字分别转换。 3不必强制转换,因此它保持为整数类型。

当然,这些结果都同样有效。

答案 1 :(得分:0)

“正确”代码可能类似于(“完整”十进制):

def generate_decimals2(begin='2.0', end='5.5', step='0.5'):
    decimals = []
    num = Decimal(begin)
    while num <= Decimal(end):
        decimals.append(num)
        num += Decimal(step)
    return decimals