我正在阅读SOA webservice,它以十进制格式返回值。要求是我们需要显示值的任何服务返回(包括小数位)。我遇到的问题是,每当铸造0位小数后小数位后面的0值被删除。例如在decimal1和decimal3中,它将返回123和123.1去掉最后一个小数位。
decimal decimal1 = (decimal) 123.00; --returns 123
decimal decimal2 = (decimal) 123.01; --returns 123.01
decimal decimal3 = (decimal) 123.10; --returns 123.1
有没有办法让我可以得到小数位而不会在最后丢失0值?结束数据类型必须是十进制(或数值),不能是字符串。 感谢
Sanjeev
答案 0 :(得分:3)
您的问题是123.10
是double
,double
不会保留decimal
等精确信息。
因此123.10
的基本表示等于123.1
==> decimal
的演员阵容发生得太晚。
解决方案是使用decimal
后缀在源代码中声明m
字面值。
var decimal1 = 123m;
var decimal2 = 123.10m;
decimal1.ToString() // gives "123";
decimal2.ToString() // gives "123.10";
答案 1 :(得分:0)
如果您想保留数字,则需要转换为字符串:
Convert.ToDecimal("1.10")
Convert.ToDecimal("1.1")
因为没有保留它们是浮动的。
Float并没有记得"十进制数字。在编译期间,所有十进制浮点字面值都将转换为它们的二进制对应值,并且十进制0-s将丢失:
csharp> BitConverter.GetBytes(1.1)
{ 154, 153, 153, 153, 153, 153, 241, 63 }
csharp> BitConverter.GetBytes(1.10)
{ 154, 153, 153, 153, 153, 153, 241, 63 }
答案 2 :(得分:0)
您在这里担心的是如何将小数格式化为string
,您可以使用.ToString()
的各种覆盖来控制它。 "数据' decimal
值保持不变,无论它如何作为字符串输出。
答案 3 :(得分:0)
正如其他人所提到的,十进制是一种不关心其格式化的值类型,它关心它如何持续精确的十进制。将十进制表示为人类可读的字符串应由表示层处理,并且在该层中,十进制应从十进制类型转换为字符串类型。在这里,您可以格式化小数,以便显示(作为字符串)小数点后的XX值,舍入,.
作为分隔符或`,'取决于您的用户文化等。
请参阅Microsoft Standard Numeric Formats Strings网站,其中显示了许多可用于格式化小数的现有方法(以及其他类型)。
您需要做的是使用N / Number格式说明符。
decimal decimal1 = 123M;
var myFormattedString = decimal1.ToString("N2");