Double Convert.ToDecimal控制十进制数字

时间:2012-10-22 11:39:31

标签: .net

我正在尝试使用Convert.ToDecimal函数将double转换为小数。 问题是某种方式.net选择省略十进制数字,具体取决于原始双变量的大小。

采用以下示例:

        double d = 2999247013.972682;
        decimal convDecimal = Convert.ToDecimal(d);
        decimal realDecimal = 2999247013.972682M;

        Console.WriteLine(d);
        Console.WriteLine(convDecimal);
        Console.WriteLine(realDecimal);

产生以下输出:

2999247013,97268  // comments: (actual value 2999247013,972682)
2999247013,97268  // comments: (actual value 2999247013,97268)
2999247013,972682 // comments: (actual value 2999247013,972682)

(','是当前区域设置的小数分隔符)

我想要实现的是使用Convert.ToDecimal(d)并获得十进制数2999247013,972682。

有人想过吗?

2 个答案:

答案 0 :(得分:3)

这是因为返回的Decimal值最多只能包含15个有效数字。来自MSDN

  

此方法返回的Decimal值最多包含15个值   有效数字。如果value参数包含15以上   有效数字,使用舍入到最近的四舍五入。该   下面的例子说明了Convert.ToDecimal(Double)方法   使用舍入到最近返回值为Decimal的值为15显着   位数。

因此,如果有超过15位有效数字,它将被四舍五入,这就是您的情况下发生的情况,因为您传递的double值有16位有效数字。

答案 1 :(得分:0)

正如前面提到的Here .net中的双数据类型有15-16位数,我猜你的情况是15,所以省略了最后一位数。为什么你首先使用双? 您可以阅读double vs decimal了解有关这些类型及其用途的更多信息。