以十进制计算小值,预期结果为= 345.00但结果获得= 345.0000
我的代码是decimal temp= 6900 * ( 5 / 100);
temp = 345.0000如何围绕此?我想显示345.00?这是我的错吗?
我也尝试了这段代码Math.Round(tempdiscountprice, 2);
,但它不会在这里工作。帮帮我
答案 0 :(得分:3)
我认为你没有展示你的真实代码。以下将给出0的结果,因为(5/100)使用整数运算来计算:
decimal temp = 6900 * (5 / 100);
Console.WriteLine(temp.ToString()); // result is 0
如果您使用小数,您将获得以下内容:
decimal temp = 6900 * (5M / 100);
Console.WriteLine(temp.ToString()); // result is 345.00
但是十进制类型确实保留了尾随零:
decimal temp = 6900 * (5.0000M / 100);
Console.WriteLine(temp.ToString()); // result is 345.0000
为了更严格地遵守ECMA CLI规范,在.NET 1.1中引入了保留这样的尾随零。
但没有什么可以阻止你用两位小数格式化输出,例如:
decimal temp = 6900 * (5.0000M / 100);
Console.WriteLine(temp.ToString("N2")); // result is 345.00
答案 1 :(得分:2)
正如user2864740
已经指出的那样,问题不在于您的舍入,而是将值显示为字符串。尝试:
decimal temp = 345.0000m;
String.Format("{0:0.00}", temp)
答案 2 :(得分:1)
我认为您向我们展示了错误的代码,因为结果不会导致345.00
或345.0000
。它总是得到0
。
temp
0
应为5 / 100
因为您integer division,0
始终为temp
。这就是为什么您的6900 * 0
会0
然后{{1}}。
如果您向我们展示了正确的代码,那么您的问题似乎是显示问题,而不是舍入问题。
如果您想将数字格式化为字符串,请查看;