首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c#中舍入十进制值?

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

Stack Overflow用户
提问于 2013-11-28 07:16:55
回答 3查看 725关注 0票数 1

计算小数时,预期结果为345.00,而结果为345.0000。

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

温度= 345.0000如何绕过这一关?我要拿345.00块吗?我犯了什么错?我也尝试过这个代码Math.Round(tempdiscountprice, 2);,但是它在这里行不通。帮帮我

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-28 07:29:41

我不认为你在展示你的真实密码。下面的结果为0,因为(5 / 100)是使用整数算法计算的:

代码语言:javascript
复制
decimal temp = 6900 * (5 / 100);
Console.WriteLine(temp.ToString()); // result is 0

如果使用十进制,您将得到以下内容:

代码语言:javascript
复制
decimal temp = 6900 * (5M / 100);
Console.WriteLine(temp.ToString()); // result is 345.00

但是,十进制类型确实保留了尾随零:

代码语言:javascript
复制
decimal temp = 6900 * (5.0000M / 100);
Console.WriteLine(temp.ToString()); // result is 345.0000

为了更严格地符合ECMA规范,在.NET 1.1中引入了这样的尾随零。

但是没有什么可以阻止您用两个小数位数格式化输出,例如:

代码语言:javascript
复制
decimal temp = 6900 * (5.0000M / 100);
Console.WriteLine(temp.ToString("N2")); // result is 345.00
票数 3
EN

Stack Overflow用户

发布于 2013-11-28 09:19:16

正如user2864740前面所指出的,问题不在于舍入,而在于将值显示为字符串。尝试:

代码语言:javascript
复制
 decimal temp = 345.0000m;
 String.Format("{0:0.00}", temp)
票数 2
EN

Stack Overflow用户

发布于 2013-11-28 07:25:13

我认为您向我们展示了错误的代码,因为这样不会得到345.00345.0000。它总是得到0

您的temp应该是0,因为自从您执行http://msdn.microsoft.com/en-us/library/aa691373%28v=vs.71%29.aspx之后,5 / 100始终是0。这就是为什么您的temp6900 * 0,那么它将是0

如果你给我们看正确的代码,你的问题看起来就像显示问题而不是四舍五入的问题。

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

  • Custom Numeric Format Strings
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20259938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档