Pus*_*kar 16 c# string decimal
我面临的一个问题,当我尝试转换decimal?到string.情景是
decimal decimalValue = .1211;
string value = (decimalValue * 100).ToString();
Run Code Online (Sandbox Code Playgroud)
当前结果:值= 12.1100
预期结果:值= 12.11
请让我知道,这可能是什么原因.
Tim*_*ter 21
Decimal保留数字中的任何尾随零Decimal.如果你想要两个小数位:
decimal? decimalValue = .1211m;
string value = ((decimal)(decimalValue * 100)).ToString("#.##")
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/0c899ak8.aspx
要么
string value = ((decimal)(decimalValue * 100)).ToString("N2")
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
十进制数是一个浮点值,由一个符号,一个数值组成,其中值中的每个数字范围从0到9,以及一个缩放系数,表示浮动小数点的位置,用于分隔积分和小数部分的数值.
Decimal值的二进制表示由1位符号,96位整数和用于划分96位整数的比例因子组成,并指定它的小数部分.缩放因子是隐式地数目为10,升温至指数取值范围为0至28.因此,十进制值的二进制表示的形式为,((-2 96到2 96)/ 10 (0〜28) ),其中-2 96 -1等于MinValue,2 96 -1等于MaxValue.
缩放因子还保留十进制数中的任何尾随零.尾随零不影响算术或比较运算中的十进制数的值.但是,如果应用了适当的格式字符串<<,则可以通过ToString方法显示>>尾随零.
备注:
Nullable<decimal>.ToString没有格式提供程序克里斯指出,需要处理的案件Nullable<decimal>是null.一种方法是使用Null-Coalescing-Operator:
((decimal)(decimalValue ?? 0 * 100)).ToString("N2")
Run Code Online (Sandbox Code Playgroud)Jon Skeet的这篇文章值得一读:
.NET中的十进制浮点数(如果你不耐烦的话,可以保留零)
由于您使用Nullable<T>as decimal,Nullable<T>.ToString()方法没有重载,因此可以使用参数进行格式化.
而不是,您可以显式地将其转换为decimal,您可以使用.ToString()方法进行格式化.
只需"0.00"在您的.ToString()方法中使用格式.
decimal? decimalValue = .1211M;
string value = ((decimal)(decimalValue * 100)).ToString("0.00");
Console.WriteLine(value);
Run Code Online (Sandbox Code Playgroud)
输出将是;
12.11
Run Code Online (Sandbox Code Playgroud)
这是一个DEMO.
作为替代方案,您可以在Nullable<T>.Value没有任何对话的情况下使用;
string value = (decimalValue * 100).Value.ToString("0.00");
Run Code Online (Sandbox Code Playgroud)
查看更多信息 Custom Numeric Format Strings