Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 十进制移位自定义_Python_Python 3.x - Fatal编程技术网

Python 十进制移位自定义

Python 十进制移位自定义,python,python-3.x,Python,Python 3.x,我有一个关于如何根据需求转换小数的问题。 有一个金额列表,其中包含三个distinc值(base、option、amount)。 该选项有三个数字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, '-0b1010011

我有一个关于如何根据需求转换小数的问题。 有一个金额列表,其中包含三个distinc值(base、option、amount)。 该选项有三个数字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
问题是我只能在进行十进制移位时得到整数。例如,如果数字是1234,则选项是4,我将其放入代码中,
我只得到了0,而不是0.1234。

如果您想手动计算,而不是使用库,只需将数字除以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
除以10len(amount)-n即可,其中
n
divide\u count
len(amount)
amount
的位数

使用10的幂的示例:

amounts=[(1, 2345), (0, 3345), (2, 1223)]

for x in range(len(amounts)):
    divide_count, amount = amounts[x]
    power_amount = len(str(amount)) - divide_count

    amount = amount / (10.0 ** power_amount)
    print(amount)

“我犯了错误”:什么错误?我可以在您的代码片段中看到至少三个错误。很抱歉,刚刚编辑。您仍然存在语法错误,因此我怀疑这是您的真实代码。请发一个帖子。谢谢Karl,我从来没有想过使用while loopHi Karl,非常感谢你的帮助,但是有一个小问题,如果除法计数为零,那么如何获得正确的数字?例如,金额是1234,除法计数是0,我想得到0.1234。如果将数字移位0,为什么1234会变成0.1234?我以为0意味着你根本不会移动数字?嗨,卡尔,0意味着你应该将小数点移动到零位上(没有大于1美元的金额)。我只是在添加其他内容时得到它:option=10.0**len(str(amount))amount=amount/option。还有,求和所有数量的最佳方法是什么?我很困惑,似乎你是说当移位量为0时,你计算的东西完全不同。我以为你在把小数点向左移动,但现在你说要把小数点向右移动。原始数字到底代表什么?换档前是2345->2345还是2345->0.2345?