八进制转十进制结果异常:输入123为何输出6而非83?
八进制转十进制代码错误原因分析
调用octalToDecimal(123)输出6而非预期的83,核心原因有两个:
Python不支持
++i自增语法
你写的++i在Python里根本不会实现自增,它会被解析为+(+i),也就是i的值始终是初始的0。这导致每次计算rem * 8**i时,都是rem * 1,最终结果就是3+2+1=6。要实现自增,必须写成i += 1或者i = i + 1。浮点数除法的潜在问题(当前案例未爆发,但需修正)
代码里用octalNumber /= 10做除法会得到浮点数(比如123/10=12.3),虽然配合math.floor暂时能取整,但数字较大时容易出现精度丢失。更稳妥的是用整数除法octalNumber //= 10,直接得到整数结果,还能省去math.floor的调用。
修正后的代码如下:
def octalToDecimal(octalNumber): decimalNumber = 0 i = 0 while octalNumber != 0: rem = octalNumber % 10 octalNumber //= 10 decimalNumber += rem * 8**i i += 1 print(decimalNumber) octalToDecimal(123) # 输出83
内容的提问来源于stack exchange,提问作者user21336173
相关产品推荐
相关产品推荐

