我有一个关于如何根据需求转换小数的问题。 有一个数量列表,具有三个不同的值(基本,选项,数量)。 该选项具有三个数字0、1、2。 0表示您应将小数点后移零个空格(不超过1美元),1表示您应将小数点后右移1位。和2意味着2个地方。 例如,金额为1234,如果选项为2,则金额应为12.34,如果选项为1,则金额应为1.234。
代码如下:
amounts = [(16, 1, '0xad7'),
(8, 2, '0o7125'),
(2, 1, '-0b101001101000'),
(8, 1, '0o2163'),
(16, 2, '0x9ec'),
(2, 2, '-0b10011110111'),
(8, 1, '-0o5074')]
from decimal import Decimal
for x in range(len(amounts)):
amount= int(amounts[x][2],base=amounts[x][0])
amount= Decimal(amount).shift(-amounts[x][1])
print(amount)
我得到如下输出:
277
36
-266
113
25
-12
问题是我只有在进行小数转换时才能获取int。例如,如果数字为1234,则选项为4,然后将其放入代码中, 我只有0,而不是0.1234。
答案 0 :(得分:0)
如果要手动计算而不是使用库,只需将数字除以10,即可为每个数字指定多次。假设2345映射为0.2345作为起始数字,这会将小数点右移一定的次数。
示例:
amounts=[(1, 2345), (0, 3345), (2, 1223)]
for x in range(len(amounts)):
divide_count, amount = amounts[x]
loop_times = len(str(amount)) - divide_count
# Keep dividing the number by 10
for x in range(loop_times):
amount = amount / 10.0
print(amount)
运行此命令的输出是:
2.345
0.3345
12.23
编辑:我也刚刚意识到,因为它总是被10除,而while循环是不必要的。您只需将amount
除以10 len(amount)-n ,其中n
是divide_count
,而len(amount)
是{ {1}}有。
使用10的幂的示例:
amount