我正在存储一个值(最初表示为字符串) - 12345678901234.12345678912 - 在一个双变量中。存储后,它以指数格式表示(带有e)。如何将此指数表示转换为原始(字符串)表示?
Dim s as string = "1234567891234567.123456789"
Dim d as Double
Double.TryParse(s, d)
Console.WriteLine(d) 'Prints 1.23456789123457E+15
使用Decimal解决问题,但为什么不能双重做?
答案 0 :(得分:2)
您的字符串包含25位有效数字。 double
根本不保留这么多信息。即使decimal
也几乎不能保持那么多(28/29位数)。来自System.Double
的文档:
默认情况下,Double值包含15个十进制数字的精度,但内部最多保留17位数。
您应该在binary floating point和decimal floating point上阅读我的文章以获取更多信息 - 它们从C#的角度来看主题,但您显然使用的是VB中的相同类型。
在您的特定情况下,最接近1234567891234567.123456789的完全 double
值仅为1234567891234567 - 您将丢失所有小数点后的信息。< / p>