如何保留int变量的前导零?

Posted

技术标签:

【中文标题】如何保留int变量的前导零?【英文标题】:How to retain leading zeros of int variables? 【发布时间】:2012-11-10 01:04:36 【问题描述】:

下面是一段代码,它是功能解密和加密程序的一部分。

while checkvar < maxvar: # is set to < as maxvar is 1 to high for the index of var
    #output.append("%02d" % number)
    i =ord(var[checkvar]) - 64 # Gets postional value of i
    i = ("%02d" % i)
    if (checkvar + 1) < maxvar:
        j =ord(var[(checkvar + 1)]) - 64 # Gets postional value of i
        j = ("%02d" % j)
        i = str(i) + str(j) #'Adds' the string i and j to create a new i
    li.append(int(i))
    checkvar = checkvar + 2

print li

如您所见,两个变量 i 和 j 首先被视为字符串,以在任何单个数字前添加 0(作为字符串)。然后将这些变量组合成一个四位数字(仍为字符串)。稍后在程序中创建的数字用于pow() 函数,因为ints 删除所有前导零。

我的问题:是否可以强制 python 为ints 保留前导零?我已经并继续在网上搜索。

编辑

为了帮助人们,我在程序中加入了加密部分。这就是问题所在。上述代码中创建的变量通过pow() 函数传递。由于这无法处理字符串,我必须将变量转换为ints,其中前导零丢失。

#a = li[]
b=int(17)#pulic = e
c=int(2773)#=n

lenli=int(len(li))
enchecker = int(0)

#encrpted list
enlist = []

while enchecker < lenli:
    en = pow(li[enchecker],b,c)#encrpyt the message can only handle int
    enlist.append(int(en))
    enchecker = enchecker + 1

print enlist

【问题讨论】:

你有i = "%02d" %i,这是正确的做法……为什么这对你不起作用? 不,整数值不存储前导零。否则,您将如何定义要考虑多少个前导零?您需要将其格式化为以字符串形式打印,您当前正在使用它。 当 Python 存储一个整数时,实际上它只是一堆 1 和 0。您看到的十进制数是如何将这些位转换为人类可读的表示形式。您可以使用字符串格式化函数(如您正在使用的函数)将前导零添加到此表示中,但您不能将前导零存储在 int 本身中。这没有任何意义。 @inspectorG4dget。该代码确实有效。问题是 int 变量删除 0。在 Rohit Jain。如果您问有多少个零,我会认为这已经完成(虽然它仍然是一个字符串)。如果您在谈论定义零的python,那么我不知道 【参考方案1】:

尽管上面关于 1、01 和 001 的 cmets 都是正确的,它们都与 int 相同,但它对于时间建模或连续电影制作以保持前导零非常有帮助。我经常这样做以确保电影剪辑的顺序正确。最简单的方法是使用zfill() 确保数字的str 版本至少具有您告诉它的字符数,并通过用零填充字符串“数字”的左侧来实现.

>>> x = int(1)    
>>> NewStringVariable = str(x).zfill(3)    
>>> print NewStringVariable    
001    
>>> NewStringVariable = str(x).zfill(5)    
>>> print NewStringVariable    
00001

【讨论】:

我认为这个答案应该被接受。 这是一个“字符串”而不是“整数”类型。 “类型”在上下文中很重要。如果我们希望新变量是“字符串类型”,这是一个很好的方法,但如果我们需要“整数”类型,那就不行。 最佳答案。但是如果前导零的数量是可变的,因为我们不知道但我们想保留前导零的输入数量 @Xonshiz 在 int 类型中维护前导 0 是没有意义的。 1、01 和 001 都只是 1,唯一需要前导零的情况是用于显示目的。 嗯,这是有道理的。但是,我只是指出了这一点,以防有人会来寻找这个然后挠头,为什么它会引发其他错误。【参考方案2】:

前导零的概念是一个显示概念,而不是一个数字概念。您可以在数字上放置无限数量的前导零而不更改其值。由于不是数字概念,所以不与数字一起存储。

在将数字转换为字符串时,您必须决定需要多少个零。如果需要,您可以单独保留该号码。

【讨论】:

【参考方案3】:

我从我的 Arduino 的串行线路上收到了像 hhmmss 这样的日期字符串。

所以假设我得到了s = "122041";这将是12:20:41,但是9am 将是090000

语句 print "%d" % (s) 引发运行时错误,因为 9 不是八进制数,因此是非法字符。

解决这个问题:

print "%06d" % (int(s))

希望有帮助

【讨论】:

以上是关于如何保留int变量的前导零?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 整数中保留前导零 [重复]

导出为 CSV 时,如何在列中保留前导零?

如何在Java(Android)中使用getMonth添加前导零[重复]

将使用 PHP 创建的 csv 文件导入 Excel 时,如何在数字字符串值中保留前导零?

计算 Int32 中的前导零

如何在 C sprintf 中添加用户定义的变量前导零?