相关疑难解决方法(0)

十进制vs双! - 我应该使用哪一个?何时使用?

我一直看到人们在C#中使用双打.我知道我读到某个地方,双打有时会失去精确度.我的问题是什么时候应该使用双倍,何时应该使用小数类型?哪种类型适合货币计算?(即超过1亿美元)

c# precision double currency decimal

851
推荐指数
7
解决办法
42万
查看次数

在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

double ×2

currency ×1

precision ×1