C#で。 20桁の精度のdouble(データベースから抽出したもの)があります。 Visual Studio(QuickWatchを使用)では、doubleの値が= 0.00034101243963859839であることがわかります。
この値をテキストボックスに表示し、取り出してdoubleに戻すときに同じ値にしたいのですが。しかし、私は常に最後の2桁を失います
私は以下を試しました:
double d = 0.00034101243963859839;
string s = d.ToString();
string s2 = d.ToString("F20");
string s3 = d.ToString("0.00000000000000000000"); -- 20 0's
string s4 = (d*100d).ToString();
これらの場合:
s = 0.000341012439638598 s2 = 0.00034101243963859800 s3 = 0.00034101243963859800 s4 = 0.0341012439638598
私は次のことができるようになりたいです:
double d = 0.00034101243963859839;
string s = d.ToString();
//...
double d2 = double.Parse(s);
if(d == d2)
{
//-- Success
}
これらの最後の2桁の精度を維持する方法はありますか?
「R」を使用 数値形式の文字列 :
double d = 0.00034101243963859839;
string s = d.ToString("R");
//...
double d2 = double.Parse(s);
if(d == d2)
{
//-- Success
}
R
は「往復」を表します。リンクされたドキュメントから:
この形式は、シングルタイプとダブルタイプでのみサポートされています。ラウンドトリップ指定子は、文字列に変換された数値が解析されて同じ数値に戻されることを保証します。
余談ですが、最後の2桁を維持する方法はないと思います。利用できる精度はそれほど多くないので、そもそもd
になるとは思えません。しかし、文字列が少なくともあなたが持っているものを正しく読み返すことを確認することができます。
本当に追加の精度が必要な場合は、代わりにdecimal
を使用してみてください。
いいえ。doubleは2進数であるため、10進値には適していないという事実に加えて、doubleの最大小数点数は15/16桁(53ビット)です。 10進数の最大値は28/29桁(96ビット)なので、使用しても問題ありません。データベースの精度が高い場合は、C#用の独自のbignumクラスが必要です。実装については、stackoverflowを調べてください。