2012-02-24 10 views
1

私はdouble変数に123456789.12345678912のような値(元々の文字列で表現されています)を格納しています。格納後、指数形式(eを持つ)で表されます。この指数表現を元の(文字列)表現に変換するにはどうすればよいですか?VB.NET - 文字列をdoubleとbackに変換する

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

Decimalを使用すると問題は解決しますが、なぜそれができませんか?

答えて

2

文字列には25桁の有効数字が含まれています。 doubleは、単にその情報量を保持しません。 decimalでもそれほど多く(28/29数字)を保持することはできません。 System.Doubleのドキュメントから:

デフォルトでは、Double値には17桁の精度がありますが、内部では最大17桁の精度が維持されます。彼らはビューのC#の点から話題に来るが、あなたは明らかにVBから同じタイプを使用している -

あなたはより多くの情報のためbinary floating pointdecimal floating pointの私の記事をお読みください。あなたの特定のケースで

、1234567891234567.123456789に最も近い正確なdouble値はちょうど1234567891234567です - あなたは、小数点以下すべての情報を失っています。

関連する問題