首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中更改十进制的精度(尾随零保持)

问如何在C#中更改十进制的精度(尾随零保持)
EN

Stack Overflow用户
提问于 2017-04-04 07:46:50
回答 1查看 949关注 0票数 0

decimal值在C#中有一个固定的小数点,因此知道它在创建时有多少小数位:

代码语言:javascript
复制
25.000m.ToString()

返回"25.000",与带有浮点的double不同。

这个问题是而不是关于如何用固定小数显示数字的,我知道各种字符串转换选项。这是关于decimal数据类型的内部表示,我只是使用.ToString()来显示它。

现在我想把一个数字乘以一个固定的小数。这样做是可行的:

代码语言:javascript
复制
Math.Round(25.0000m, 3) -> 25.000

但是,当小数小于3,或者它来自于一个double时,它不会(当然):

代码语言:javascript
复制
Math.Round(25.00m, 3) -> 25.00
Math.Round((decimal) 25.0000d, 3) -> 25
(decimal) Math.Round(25.0000d, 3) -> 25

那么,我如何将任何double数相加到一个有3个强制位置的decimal呢?

因为这是很难解释,建议一个更好的标题是欢迎的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-04 07:58:04

可以始终将0.000m添加到结果中:

代码语言:javascript
复制
        var x = Math.Round(25.00m, 3);
        var y = 0.000m;
        var z = x + y;

打印z显示它现在有3位小数点。不过,我同意这样的意见,即这是值得怀疑的。

(NB -如果x的当前值足够大,如果不改变积分部分就无法容纳额外的位置,则仍然不会创建3位小数)。

由发问者编辑:为了使这个答案可以接受,从评论中添加这个问题(这个问题要求双源,这也解决了VS2008的一个问题):

代码语言:javascript
复制
var z = Math.Round(((decimal) 25d) + 0.000m, 3);

有趣的是,在VS2008中,只有在decimal和添加0.000m的转换在Math.Round()中完成时,它才能工作。在VS2015中,它也可以在外部完成。如果有人知道对此的解释,请评论。

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

https://stackoverflow.com/questions/43201233

复制
相关文章

相似问题

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