将字符串转换为整数,不丢失开头的零

17

我尝试使用 int.parse 和 convert 类将字符串转换为整数。

在转换时,我失去了开始的 0,而我不想要这个。

例如:09999 变成了 9999 - 我不想要这个。

我想保留它原来的样子。

我该如何做到这一点?


5
数学上,前导零是无关紧要的。09999和9999同样表示九千九百九十九。既然这两个数本质上相同,为什么还要保留前导零呢? - BoltClock
2
你想要一个带前导零的整数表示吗? - Clayton
7
不要将它转换为整数类型。 - lincolnk
一个前导的0不是表示八进制吗?因此09999是一个无效的数字... - Dunes
2
你可以计算字符串的长度,然后转换为整数,对其进行操作,再将其转换回字符串,并在其开头添加零,直到其长度与之前相同。 - Andreas Hartmann
显示剩余4条评论
11个回答

39
myNumber.ToString("D5");

//D 代表“十进制”,而数字5是您希望该数字始终保持的位数。这将使用零填充值,直到它达到5个数字。


3
你是唯一回答这个问题的人。有时人们只想以特定的方式格式化某些内容! - Kulahan
@DanCallahan 感谢您实际回答这个问题,正是我所需要的。 - Baxter

16

你无法做到。一个int是用来表示数学整数的,数字 099999999 在数学上是完全相同的。

也许这里有不同的问题。你为什么需要这样做?也许有更好的方法来实现你想要的目标。


10

如果您想始终以5位打印数字,可以使用以下方式:

myNumber.ToString().PadLeft(5, '0');

4
不,实际上int.Parse("09999")返回的是0x0000270F。因为int类型的长度是32位,其中18位是前导零(确切地说,有一位是符号位,你可以认为只有17位前导零)。
只有在将其转换回字符串时,才会得到"9999",该字符串中前导零的存在或缺失取决于转换回字符串的方式。

1
// For our requirement that new ID's should be of same length as old ID's.
string strID = "002017";
int number = int.Parse(strID);
string newID = (++number).ToString("D" + strID.Length);

0

不行,如果你想保持它的方式,你必须将其作为字符串维护。


0

整数值不能有前导零


1
一半的 int 值具有前导零(即零位)。 - Ben Voigt

0

如果你只是将数据转换为整数来测试其值,请保留原始数据并在需要前导零的时候使用其字符串值。如果你需要在进行数学运算后使整数具有零填充,则必须使用sprintf或类似工具对其进行格式化,以便在输出时使用。


0
你不能这样做,但是如果你需要将它转换为整数并保留零,你可以创建一个副本然后将其转换为整数,这样你就会有两个版本,一个是整数,一个是字符串。

0

我曾经遇到同样的问题; 通过 if else 条件语句解决了它 找不到其他的解决方案


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接