1

小数点以下 12 桁の double を文字列に変換しようとしていますが、小数点以下 10 桁の文字列しか返されません。

ToString、Format、FormatNumber、CStr、およびを試しSystem.Convert.ToStringました。それらはすべて小数点以下 10 桁を返します。

(decimal データ型でも同じ動作)

例:

d = Date.Parse(sDate).ToOADate (value is 41261.001388888886)

d.ToString = 41261.0013888889

CStr(d) = 41261.0013888889

FormatNumber(d, 12) = 41,261.001388888900

、 の場合、Format12FormatNumber桁指定時は10桁に丸められます。

DataViewこれは、オブジェクトのフィルターを作成したときに発生しました。

これを回避する方法はありますか、それとも制限.Netですか?

4

2 に答える 2

1

Decimal Typeの MSDN ページを見ると、次のように記載されて います。

Decimal 変数または定数に大きな値を割り当てるには、D タイプの文字を使用する必要がある場合があります。この要件は、次の例に示すように、リテラル型の文字がリテラルの後に続く場合を除き、コンパイラがリテラルを Long として解釈するためです。

だからあなたの例に基づいて

Module Module1

    Sub Main()
        Dim d As Decimal
        d = 41261.001388888886D

        Console.WriteLine(d)
        Console.WriteLine(CStr(d))
        Console.WriteLine(FormatNumber(d, 12))
        Console.WriteLine(d.ToString("#0.000000000000"))
        Console.ReadLine()
    End Sub

End Module

表示:

41261.001388888886
41261.001388888886
4,1261.001388888886
41261.001388888886

これを試してみてください。正しく動作するようです

Dim d As Decimal = CDec(String.Format("{0:G20}", Date.Parse(CStr(Now)).ToOADate))
于 2013-01-23T06:55:53.277 に答える
0

Double.ToString は 15 桁の精度のみを使用します。

使用する必要がありますd.ToString("R")

MSDNから:

往復 ("R") 形式指定子は、文字列に変換された数値が解析されて同じ数値に戻されることを保証します。

...

この指定子を使用して Single または Double 値をフォーマットする場合、最初に、Double の場合は 15 桁の精度、Single の場合は 7 桁の精度で、一般的なフォーマットを使用してテストされます。値が正常に解析されて同じ数値に戻された場合は、一般的な書式指定子を使用して書式設定されます。値が正常に解析されて同じ数値に戻されない場合、Double の場合は 17 桁の精度、Single の場合は 9 桁の精度を使用してフォーマットされます。

于 2013-01-23T15:12:54.587 に答える