2012-02-24 132 views
1

我在双精度变量中存储了一个像(123456789.12345678912)这样的值(表示为最初的字符串)。存储后,它以指数格式(用e表示)表示。我如何将这个指数表示转换为原始(字符串)表示?VB.NET - 将字符串转换为双精度字符并返回

Dim s as string = "1234567891234567.123456789" 
Dim d as Double 
Double.TryParse(s, d) 
Console.WriteLine(d) 'Prints 1.23456789123457E+15 

使用小数解决问题,但为什么不能双重做?

回答

2

您的字符串包含25个有效数字。 double根本不保留这些信息量。即使decimal几乎不能容纳那么多(28/29位)。来自System.Double的文档:

默认情况下,Double值包含精度15个十进制数字,尽管内部最多保留17位数字。

你应该阅读我的binary floating pointdecimal floating point文章以获取更多信息 - 他们都在从一个C#点的话题,但你显然使用同类型从VB。

你的具体情况,最接近1234567891234567.123456789的确切double值只是1234567891234567 - 你失去所有小数点后的信息。

相关问题