如何在c#中舍入十进制值?

时间:2013-11-28 07:16:56

标签: c# winforms gridview

以十进制计算小值,预期结果为= 345.00但结果获得= 345.0000

我的代码是decimal temp= 6900 * ( 5 / 100);

temp = 345.0000如何围绕此?我想显示345.00?这是我的错吗? 我也尝试了这段代码Math.Round(tempdiscountprice, 2);,但它不会在这里工作。帮帮我

3 个答案:

答案 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.00345.0000。它总是得到0

temp 0应为5 / 100因为您integer division0始终为temp。这就是为什么您的6900 * 00然后{{1}}。

如果您向我们展示了正确的代码,那么您的问题似乎是显示问题,而不是舍入问题。

如果您想将数字格式化为字符串,请查看;