将整数解析为字符串

时间:2017-07-17 00:20:50

标签: 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"。这里发生了什么?

2 个答案:

答案 0 :(得分:3)

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

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

在您的情况下,您正在使用就地浮点除法运算符/=。您需要使用就地 true division 运算符:

number //= base

如果更改超出了fn的值,则预期结果为100000000

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

答案 1 :(得分:1)

在Python 3中使用:

number //= base

您当前的声明(number /= base)在Python 2中应该可以正常工作。