对于此任务:使用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')]
这些结果之一比其他结果更合适吗?
答案 0 :(得分:1)
在添加int
之后的第二种情况下(从float
到0.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