在C#中将十进制转换为双精度浮点数?

68

我有一个存储为十进制的变量:

decimal firststYrComp = Int16.Parse(tb1stYr.Text.ToString());

现在我有一个需要强制转换为Double类型的变量?我该如何做呢?谢谢!


2
你有什么理由不想一开始就使用 Double.Parse(tb1stYr.Text.ToString()) 吗? - sarvesh
是的!我想将整数存储到这种格式中:00.000。十进制可以做到。双精度浮点型也可以吗?只是出于好奇! - RG-3
2
.NET - 我通常不会说什么,但你真的应该考虑更改你的显示名称,它非常不专业。 - Security Hound
3个回答

101

你已经回答了自己的问题—只需要将它转换为double类型:

decimal x  = 3.141592654M ;
double  pi = (double) x ;

2
如果您在转换的结果中包含注释,那将会很好。 - Bojidar Stanchev
1
decimal 强制转换为 double 会失败吗?当它是缩小转换时会发生什么? - Dai
尝试在 .net6 中转换 10500000000.000000000000,你会得到 10499999999.999998!(在 .net 4.7.2 中也适用) - Thomas
@Thomas — 二进制浮点数跟范围有关的精度问题。你需要阅读Goldberg在1991年发表的论文,题为《计算机科学家应该了解的浮点运算》(What Every Computer Scientist Should Know About Floating-Point Arithmetic)。此外,还可以参考这个网站:《每个程序员都应该了解的浮点运算,或者说,为什么我的数字加起来不对?》(What Every Programmer Should Know About Floating-Point Arithmetic, Or, Why Don’t My Numbers Add Up?)。 - Nicholas Carey

42

你可以使用 decimal 的内置转换器。

decimal decimalValue = 5; 
double doubleValue = decimal.ToDouble(decimalValue);

17

只需尝试

Decimal yourDecimal = 3.222222m;

Convert.ToDouble(yourDecimal);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接