2011-07-07 101 views
9

我试过int.parse,并将类转换为将字符串转换为int。将字符串转换为int而不会在开始处丢失零

虽然我正在转换。我在开始时输了0,我不想要。

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

我想保持原样。

我该怎么做?

+5

在数学上,前导0是无关紧要的。 09999和9999等于九千九百九十九。为什么你必须保持领先的零,如果它基本上是相同的数字? – BoltClock

+1

你想要一个具有前导零的整数表示? – Clayton

+0

这是令人困惑的。这仅用于打印/显示此整数的值吗? – Joe

回答

11

你不能。 int旨在表示数学整数。数字099999999在数学上完全相同。

也许这里有一个不同的问题。你为什么需要这样做?也许有更好的方法来做你想做的事情。

0

你不能。如果您希望它保持原样,您将不得不将该值保留为字符串。

3

不,int.Parse("09999")实际上返回0x0000270F。正好32位(因为这是多大的int),其中18个是前导零(准确地说,一个是符号位,你可能会认为只有17个前导零)。

只有当你将它转换回一个你得到“9999”的字符串时,该字符串中前导零的存在与否才会被转换回字符串。

0

int类型不能有前导零

+1

所有'int'值的一半都有前导零(即零)。 –

+0

呵呵,你是对的! :) –

8

如果你想要做这样的事情总是与5个地方打印您的号码,它会像

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

如果你只是转换为int测试值,保留原始数据并在需要领先的zeor时使用它的字符串值。如果您在数学上使用整数后需要使用零填充,则必须在输出时使用sprintf或类似的格式对其进行格式化。

0

你不能,但如果你需要将它转换为int并保留零,你可以创建它的副本,然后将其转换为int,那么你将有两个版本,一个是int,一个是字符串。

29
myNumber.ToString("D5"); 

//D代表“小数”,和5是你想要的数量要始终指定位数的金额。这将用零填充您的值,直到达到5位数。

+1

你是字面上唯一回答问题的人。有时候人们只是想以某种特定的方式来设计一些东西! – Kulahan

+0

@DanCallahan谢谢你回答这个问题,正是我所需要的。 – Baxter

0
// 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); 
相关问题