Python 3长数字转列表时末尾数字不符问题求助
问题原因分析
你的问题出在使用了浮点数除法/,导致大整数的精度丢失:
- 你使用的数字
6145390195186705544是一个超大整数,远超过双精度浮点数(Python中float类型)的精确表示范围——双精度浮点数仅能精确表示2^53以内的整数(约9007199254740992)。 - 执行
num/10时,Python会先把整数num转换为float类型,这个转换过程已经丢失了精度,无法准确还原原数。 - 后续
int(num/10)得到的是不精确浮点数的整数部分,基于这个错误数值循环操作,最终导致结果完全偏离原数,甚至出现重复序列。
修复方案
有两种简单可靠的修复方式:
方法1:使用整数除法//
把num = int(num/10)替换为整数除法num = num // 10,整数除法不会转换为浮点数,能完整保留大整数的精确性:
num = 6145390195186705544 lista = [] while num != 0: lista.append(num % 10) num = num // 10 # 用整数除法替代浮点数除法 print(lista[::-1])
输出结果:[6, 1, 4, 5, 3, 9, 0, 1, 9, 5, 1, 8, 6, 7, 0, 5, 5, 4, 4],与原数完全一致。
方法2:转换为字符串处理
直接将整数转为字符串,遍历每个字符再转回整数,这种方式更直观:
num = 6145390195186705544 lista = [int(c) for c in str(num)] print(lista)
输出结果同样正确。
内容的提问来源于stack exchange,提问作者Sukruth
相关产品推荐
相关产品推荐

