文字列を取得する方法はありますか?ちょうどa の値double
、全て正確な値を 10 進数で表すために必要な小数点以下の桁数はいくつですか?
例えば(ジョン・スキートとトニー・ザ・ポニー)と入力すると、
double d = 0.3;
の実際の値はd
正確に
0.299999999999999988897769753748434595763683319091796875
すべての 2 進浮動小数点値 (無限大や NaN などを無視) は、終了する 10 進値に解決されます。したがって、出力の精度が十分であれば (この場合は 55)、常に a にあるものをすべて取得しdouble
、その正確な値を 10 進数で表示できます。また、正確な値を表示できることは、浮動小数点演算の奇妙さを説明する必要がある場合に非常に役立ちます。しかし、C# でこれを行う方法はあるのでしょうか?
私はすべて試しました標準の数値書式文字列精度が指定されている場合と指定されていない場合の両方があり、正確な値を示すものはありません。いくつかのハイライト:
d.ToString("n55")
出力0.3
には54個のゼロが続きます。これは通常通り「おそらく見たいものに合わせて丸め」、さらに末尾にゼロを追加します。カスタム書式文字列を使用した場合も同様です。0.00000...
d.ToString("r")
価値を与える十分これを解析すると、最初と同じビット パターンが得られる精度が得られますが、この場合は のみが出力されます0.3
。(定数ではなく計算の結果を扱っている場合は、これがより便利です。)d.ToString("e55")
出力2.9999999999999999000000000000000000000000000000000000000e-001
-- 精度はある程度あるが、全て私が探しているようなものが見つかりました。
double
見逃した書式文字列、または完全な精度で文字列に変換できる他のライブラリ関数、NuGet パッケージ、またはその他のライブラリはありますか?
ベストアンサー1
末尾のゼロを抑制し、科学的記数法を避けたい場合は、# プレースホルダーを使用してみてください。ただし、非常に小さな数値の場合は、プレースホルダーが多数必要になります。例:
Console.WriteLine(double.Epsilon.ToString("0.########....###"));