Python 十进制移位自定义
我有一个关于如何根据需求转换小数的问题。 有一个金额列表,其中包含三个distinc值(base、option、amount)。 该选项有三个数字0、1、2。 0表示应将小数点移动到零位(没有大于1美元的金额),1表示应将小数点从右向左移动1位。2意味着2个地方。 例如金额为1234,如果选项为2,则金额应为12.34,如果选项为1,则金额应为1.234 代码如下: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
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?