我有一个旧的VBA应用程序,它生成的值如1.123456789123456789123456789E-28。当我使用C#搜索等价数据类型时,我在SO Difference between decimal, float and double in .NET?中发现了这篇文章。根据这篇文章的建议,十进制数据类型在C#中具有最大的大小。所以我使用了十进制数据类型,但我发现小数似乎限制了VBA以指数形式表示的大值。所以我再次搜索了一下,发现这篇文章https://msdn.microsoft.com/en-us/library/ae55hdtk.aspx。正如本文中所述,相当于VBA指数形式的C#数据类型
非整数数量的值可以表示为mmmEeee,其中mmm是 尾数(所述显著位数)和电气和电子设备的指数(一个功率的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中一样精确的大指数值?
我想如果你进一步阅读第一篇文章,你会明白不同之处以及何时使用它们。我想你可能误解了你发布的第一个链接。 – Hank