C# 可为空的十进制到十进制,带3个零';追求

C# 可为空的十进制到十进制,带3个零';追求,c#,decimal,C#,Decimal,如何将可为空的十进制转换为小数点后有3个零的十进制 例:立方-->十进制?(数据类型)--sql server为此属性提供值5324。在我的viewmodel中,我有 decimal cdb 在我的databuilder类中,我将此转换为 cbd=cubed??0. 因此,cbd=5324 但是我想要 cbd=5324.000 我怎样才能得到这个呢?如果我写这个代码: decimal? cubed = 5324m; decimal cdb = cubed ?? 0.000m; Consol

如何将可为空的十进制转换为小数点后有3个零的十进制

例:立方-->十进制?(数据类型)--sql server为此属性提供值5324。在我的viewmodel中,我有

decimal cdb
在我的databuilder类中,我将此转换为

cbd=cubed??0.
因此,cbd=5324 但是我想要

cbd=5324.000
我怎样才能得到这个呢?

如果我写这个代码:

decimal? cubed = 5324m;
decimal cdb = cubed ?? 0.000m;
Console.WriteLine(cdb);
我将
5324
写入控制台

如果我将其更改为:

decimal? cubed = null;
decimal cdb = cubed ?? 0.000m;
Console.WriteLine(cdb);
我得到
0.000
。小数“记住”小数点后有多少个零

我运行以下两行:

Console.WriteLine(String.Join(":", decimal.GetBits(5324m).Select(x => x.ToString())));
Console.WriteLine(String.Join(":", decimal.GetBits(5324.000m).Select(x => x.ToString())));
我把这些拿出来:

5324:0:0:0
5324000:0:0:196608
因此,要获取具有三个零位小数的内部表示形式返回的值,可以执行以下操作:

decimal? cubed = 5324m;
decimal cdb = cubed ?? 0m;
int[] bits = decimal.GetBits(cdb);
cdb = new decimal(new [] { bits[0] * 1000, 0, 0, 196608});
Console.WriteLine(cdb);
这给了我:

5324.000

此代码适用于从
0m
4294967m
的值。如果您需要它来处理超出此范围的值,则需要对
值做更多的工作。

ToString(“0.000”)
?@SamiKuhmonen-我认为问题更多地与
十进制
的内部工作有关,而不仅仅是能够调用
.ToString(…)
@Enigmativity因为除了表示层上有多少个小数点零之外,在任何其他地方都不重要,所以不清楚。@SamiKuhmonen-我理解你的意思,但这就是OP明确提出的问题。