C# 将带零的字符串转换为十进制

C# 将带零的字符串转换为十进制,c#,C#,我有一根这样的线:“000123” 我想知道如何将这个字符串转换为十进制,但保留前导零。我使用了Convert.ToDecimal(),Decimal.TryParse&Decimal.Parse。但所有这些方法都会不断删除前导零。他们给了我一个输出:123。我要十进制返回000123。有可能吗?不,没有System.Decimal保留尾随零(从.NET 1.1开始),但不保留前导零。所以这是可行的: decimal d1 = 1.00m; Console.WriteLine(d1); // 1

我有一根这样的线:“000123”


我想知道如何将这个字符串转换为十进制,但保留前导零。我使用了
Convert.ToDecimal()
Decimal.TryParse
&
Decimal.Parse
。但所有这些方法都会不断删除前导零。他们给了我一个输出:123。我要十进制返回000123。有可能吗?不,没有
System.Decimal
保留尾随零(从.NET 1.1开始),但不保留前导零。所以这是可行的:

decimal d1 = 1.00m;
Console.WriteLine(d1); // 1.00
decimal d2 = 1.000m;
Console.WriteLine(d2); // 1.000
。。。但你的前导零版本不会

如果您实际上只是尝试使用“小数点前至少有6位数字”进行格式化,则更容易:

string text = d.ToString("000000.#");

(请注意,这将丢失有关尾随零数的信息-我不知道如何轻松地做到这两个。)
System.Decimal
保留尾随零(从.NET 1.1开始),但不保留前导零。所以这是可行的:

decimal d1 = 1.00m;
Console.WriteLine(d1); // 1.00
decimal d2 = 1.000m;
Console.WriteLine(d2); // 1.000
。。。但你的前导零版本不会

如果您实际上只是尝试使用“小数点前至少有6位数字”进行格式化,则更容易:

string text = d.ToString("000000.#");


(请注意,这将丢失有关尾随零数的信息-我不知道如何轻松地做到这两个。)

因此需要将
000123
存储在十进制变量中,首先,这是不可能的,因为
000123
不是实数。我们只能在十进制变量中存储从
-79228162514264337593543950335
+79228162514264337593543950335
范围内的实数。不用担心,您可以实现目标,
decimal.Parse()
,从输入中获取值(
123
),并使用该值处理计算。当您想将其显示为
000123
时,请使用
.ToString(“000000”)
,因此您需要将
000123
存储在十进制变量中,首先,这是不可能的,因为
000123
不是实数。我们只能在十进制变量中存储从
-79228162514264337593543950335
+79228162514264337593543950335
范围内的实数。不用担心,您可以实现目标,
decimal.Parse()
,从输入中获取值(
123
),并使用该值处理计算。当您想将其显示为
000123

时,请使用
.ToString(“000000”)
不,它不是。数字本身没有任何格式信息。你为什么要这么做?您始终可以将其格式化以特定方式显示。
…000123==00123==0123==123
如果要将
123
表示为
“000123”
请使用格式化或
左键
作为旁白,您确定这应该是十进制而不是整数吗?您正在混合数据和表示。虽然前者最为合理,但后者在不更改数据的情况下可自由满足您的需求。所以你可以用任何你喜欢的格式打印你的数据。基本上,如果你不需要/不能用数字计算,它们比实际数字更标识符,你应该考虑把它们作为字符串存储到数据库中。这方面的一个例子可能是邮政编码,甚至是电话号码,其中您经常有属于标识符的前导零和尾随零。然而,你永远不会用电话号码来计算,是吗?不,不是。数字本身没有任何格式信息。你为什么要这么做?您始终可以将其格式化以特定方式显示。
…000123==00123==0123==123
如果要将
123
表示为
“000123”
请使用格式化或
左键
作为旁白,您确定这应该是十进制而不是整数吗?您正在混合数据和表示。虽然前者最为合理,但后者在不更改数据的情况下可自由满足您的需求。所以你可以用任何你喜欢的格式打印你的数据。基本上,如果你不需要/不能用数字计算,它们比实际数字更标识符,你应该考虑把它们作为字符串存储到数据库中。这方面的一个例子可能是邮政编码,甚至是电话号码,其中您经常有属于标识符的前导零和尾随零。然而,你永远不会用一个电话号码来计算,对吗?
d.ToString(“000000.00”)“我不知道如何轻松地做到这两件事”例如?@HimBromBeere:不,因为小数点后至少会有两位数字,即使它们不是原始的。你是说输入是
1m
例如?好的,我明白了。@HimBromBeere:是的,没错。“我不知道如何轻松地用
d.ToString(“000000.00”)例如?@HimBromBeere:不,因为小数点后至少会有两位数字,即使它们不是原始的。你是说输入是
1m
例如?好的,我明白了。@HimBromBeere:是的,没错。你说“000123不是一个实数”是什么意思?I.m.o它是一个完全有效的数字,只有它的前导零不重要。当输入字符串保证包含一个数值时,试图保留前导零是毫无意义的。我想数学部分的人可能会提出相反的观点(例如)。我也同意,000123不是自然数或实数的法定数字表示。这是一个非常有效的字符串表示法。你说“000123不是实数”是什么意思?I.m.o它是一个完全有效的数字,只有它的前导零不重要。当输入字符串保证包含一个数值时,试图保留前导零是毫无意义的。我想数学部分的人可能会提出相反的观点(例如)。我也同意,000123不是自然数或实数的法定数字表示。这是一个非常有效的字符串表示形式