python - 将整数解析为字符串的意外行为

标签 python

在尝试解决 checkio 问题时练习我偶然发现了一个奇怪的行为。

def friendly_number(number, base=1000, decimals=0, suffix='',
            powers=['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']):
    power_i = 0    
    while abs(number) >= base and power_i < len(powers)-1:
        number /= base
        power_i += 1

    number_str = str(number)

    return number_str

fn = friendly_number(10**32)

我期待 fn == "100000000",但我得到了 fn = "99999999.99999999"。我将其缩小到步骤 number_str = str(number)。最奇怪的一点是在命令行上对此进行测试:当我这样做时,返回的值是 "100000000"。这里发生了什么?

最佳答案

在 Python 3 中有两种类型的除法, float 真除法。浮点除法将产生一个 float ,而真正的除法会将 float 四舍五入到最接近的整数并返回一个整数:

>>> 1 / 1 # floating-point division
1.0
>>> 1 // 1 # true division
1
>>> 

在您的例子中,您使用的是就地浮点除法运算符 /=。您需要使用就地真正的除法运算符:

number //= base

随着 fn 值的变化是预期的结果,100000000:

>>> fn = friendly_number(10**32)
>>> fn
'100000000'
>>>

关于python - 将整数解析为字符串的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45134480/

相关文章:

python - 在python中将字符串转换为小写的简单方法

python - 获取非浮点列的 DataFrame 列名列表

python - Turbogears 2 : authentication, 密码在不同表中,更新时反馈

python - 确认浏览器预取导致删除

python - Emacs:在评估缓冲区时启动一个新的劣质 python shell

python - PyInstaller 与 Pymongo 的问题

python - 我在 python 中打印钻石代码的问题

python - Python 生成器中的意外输出

Python Tkinter 网格复选框

python - json.dump() 在 Windows 和 Linux 上的不同行为