【问题标题】:Why does Python remove leading zeroes when converting from string to int?为什么 Python 在从字符串转换为 int 时会删除前导零?
【发布时间】:2014-05-01 02:52:39
【问题描述】:
>>> num = int('0241034812')
>>> print(num)
241034812
>>> 

在上面的代码中,我将变量num 设置为0241034812;但是,当我打印变量时,它会删除第一个零。

为什么会这样?

【问题讨论】:

  • 您期望什么? 2410348120241034812 是相同的数字,它们具有相同的内部表示
  • 如果要保留零,则必须将其存储为字符串,而不是 int。但是您需要转换为 int 才能真正进行算术运算。
  • Python 整数有 no 工具来存储“前导零”,因为这样做没有什么意义。前导零对数值没有意义。

标签: python types int


【解决方案1】:

整数存储/显示为“正常”数字,而不是字符串值。如果你想显示以零为前缀的数字,你可以在显示变量时这样做。

您可以使用以下语法将前导零添加到整数:

print "%010d" % (241034812,)

上面的例子将显示整数 241034812 10 位为0241034812

【讨论】:

    【解决方案2】:

    如果您以前导零有用/重要的格式存储某些数字(可能是条形码、ISBN 等),您可以在使用.format 转换回字符串时重新添加它们

    >>> num = int('0241034812')
    >>> print('{:010d}'.format(num))
    0241034812
    

    简而言之,格式规范中的第一个 0 表示如果不存在则添加前导零以填充 10(10)个字符。

    【讨论】:

    • 如果前导零很重要,我认为您没有数字。数字是数量。您不会尝试添加两个 ISBN 或电话号码。相反,你有一个字符串,即使它是一个仅由数字组成的字符串。
    【解决方案3】:

    您想将整数打印到特定的零填充宽度,请使用字符串格式。 format() function,例如:

    >>> num = 241034812
    >>> print(format(num, '010d'))
    0241034812
    

    或打印您首先从中解析整数的原始字符串。

    整数不存储“打印宽度”或任何数量的前导 0 数字。

    【讨论】:

      【解决方案4】:

      我将变量“num”设置为“0241034812”

      不,您将其设置为 241,034,812:一个整数值,大约为 2.4 亿。如果要将其设置为'0241034812',则应使用字符串而不是整数。也就是说,你应该放弃对int的调用:

      >>> num = '0241034812'
      >>> print(num)
      0241034812
      >>> 
      

      【讨论】:

        猜你喜欢
        • 2019-07-25
        • 2018-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-15
        • 1970-01-01
        • 2018-10-26
        • 2011-04-09
        相关资源
        最近更新 更多