2012-02-24 175 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 - 你失去所有小數點後的信息。

相關問題