计算小数时,预期结果为345.00,而结果为345.0000。
我的代码是这个decimal temp= 6900 * ( 5 / 100);
温度= 345.0000如何绕过这一关?我要拿345.00块吗?我犯了什么错?我也尝试过这个代码Math.Round(tempdiscountprice, 2);,但是它在这里行不通。帮帮我
发布于 2013-11-28 07:29:41
我不认为你在展示你的真实密码。下面的结果为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规范,在.NET 1.1中引入了这样的尾随零。
但是没有什么可以阻止您用两个小数位数格式化输出,例如:
decimal temp = 6900 * (5.0000M / 100);
Console.WriteLine(temp.ToString("N2")); // result is 345.00发布于 2013-11-28 09:19:16
正如user2864740前面所指出的,问题不在于舍入,而在于将值显示为字符串。尝试:
decimal temp = 345.0000m;
String.Format("{0:0.00}", temp)发布于 2013-11-28 07:25:13
我认为您向我们展示了错误的代码,因为这样不会得到345.00或345.0000。它总是得到0。
您的temp应该是0,因为自从您执行http://msdn.microsoft.com/en-us/library/aa691373%28v=vs.71%29.aspx之后,5 / 100始终是0。这就是为什么您的temp将6900 * 0,那么它将是0。
如果你给我们看正确的代码,你的问题看起来就像显示问题而不是四舍五入的问题。
如果您想将您的数字格式化为字符串,请查看;
Custom Numeric Format Stringshttps://stackoverflow.com/questions/20259938
复制相似问题