相关疑难解决方法(0)

删除尾随零

我有一些集合返回的字段为

2.4200
2.0044
2.0000
Run Code Online (Sandbox Code Playgroud)

我想得到的结果

2.42
2.0044
2
Run Code Online (Sandbox Code Playgroud)

我尝试过String.Format,但它返回2.0000并将其设置为N0舍入其他值.

.net c# decimal

160
推荐指数
7
解决办法
13万
查看次数

在C#中将小数转换为双数会产生差异

问题摘要:

对于某些十进​​制值,当我们将类型从十进制转换为double时,会将一小部分添加到结果中.

更糟糕的是,可能存在两个"相等"的十进制值,这些值在转换时会产生不同的双精度值.

代码示例:

decimal dcm = 8224055000.0000000000m;  // dcm = 8224055000
double dbl = Convert.ToDouble(dcm);    // dbl = 8224055000.000001

decimal dcm2 = Convert.ToDecimal(dbl); // dcm2 = 8224055000
double dbl2 = Convert.ToDouble(dcm2);  // dbl2 = 8224055000.0

decimal deltaDcm = dcm2 - dcm;         // deltaDcm = 0
double deltaDbl = dbl2 - dbl;          // deltaDbl = -0.00000095367431640625
Run Code Online (Sandbox Code Playgroud)

查看评论中的结果.结果从调试器的手表中复制.产生这种效果的数字的十进制数字远远少于数据类型的限制,所以它不能是溢出(我猜!).

更有趣的是,可以有两个相等的十进制值(在上面的代码示例中,参见"dcm"和"dcm2","deltaDcm"等于零),在转换时产生不同的双精度值.(在代码中,"dbl"和"dbl2",它们具有非零"deltaDbl")

我想它应该是与两种数据类型中数字的按位表示的差异相关的东西,但是无法弄清楚是什么!而且我需要知道如何按照我需要的方式进行转换.(比如dcm2 - > dbl2)

c# double decimal

43
推荐指数
3
解决办法
4万
查看次数

标签 统计

c# ×2

decimal ×2

.net ×1

double ×1