【发布时间】:2016-11-14 17:09:56
【问题描述】:
我有一个旧的 VBA 应用程序,它生成的值类似于 1.123456789123456789123456789E-28。当我用谷歌搜索 C# 中的等效数据类型时,我在 SODifference between decimal, float and double in .NET? 中找到了这篇文章。根据这篇文章的建议,十进制数据类型在 C# 中具有最大的大小。所以我使用了十进制数据类型,但我发现十进制似乎在表示 VBA 以指数形式表示的大值方面受到限制。于是我再次谷歌搜索,发现这篇文章https://msdn.microsoft.com/en-us/library/ae55hdtk.aspx。如本文所述,
非整数值可以表示为 mmmEeee,其中 mmm 为 尾数(有效数字),eee 是指数(幂 10)。非整数类型的最高正值为 7.9228162514264337593543950335E+28 用于十进制,3.4028235E+38 用于单,1.79769313486231570E+308 用于双。
这意味着 Double 数据类型具有最大范围的值。所以现在我在十进制和双精度之间感到困惑。
然后我用下面的代码做了一个小实验
double dbl = 1.123456789123456789123456789E-28;
decimal dcl = 1.123456789123456789123456789E-28M;
MessageBox.Show(dbl.ToString());
MessageBox.Show(dcl.ToString());
dbl 打印的值是 1.123456789123456789123456789E-28,而 dcl 值更改为 0.0000000000000000000000000001; 有人可以解释这里发生了什么吗?在 C# 中以相同精度表示大指数值的等效数据类型(如 VBA 中)是什么?
【问题讨论】:
-
我认为,如果您进一步阅读第一篇文章,您将了解差异以及何时使用它们。我认为您可能误解了您发布的第一个链接。