十进制移位自定义

时间:2018-10-27 20:47:24

标签: python python-3.x

我有一个关于如何根据需求转换小数的问题。 有一个数量列表,具有三个不同的值(基本,选项,数量)。 该选项具有三个数字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。

1 个答案:

答案 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 ,其中ndivide_count,而len(amount)是{ {1}}有。

使用10的幂的示例:

amount