概要:
.NET で倍精度浮動小数点数を文字列に直接変換すると、科学表記が生成される場合があります。 これは、正確な 10 進表現が必要な状況では望ましくありません。この記事では、複雑な文字列操作や正規表現に頼らずにこれを実現する簡単な方法を紹介します。
解決策:
ソリューションの中核は、慎重に作成されたフォーマット文字列を使用して ToString()
メソッドを活用することにあります。
<code class="language-csharp">doubleValue.ToString("0." + new string('#', 339))</code>
説明:
"0."
: この部分は、数値の整数部分が、たとえゼロであっても常に少なくとも 0 で表されることを保証します。new string('#', 339)
: 339 個の「#」文字を含む文字列を動的に生成します。 書式文字列内の「#」文字は数字のプレースホルダーとして機能し、重要な場合にのみ表示されます。 339 は、倍精度浮動小数点の可能な最大の小数精度に対応するために選択され、科学表記法を妨げます。このアプローチは、桁を切り捨てる可能性のある単純な方法とは異なり、精度を失うことなくすべての有効な double 値を処理します。 書式設定は .NET Framework 内で効率的に実行されるため、手動による文字列操作と比較して優れたパフォーマンスが得られます。
最適化されたコード:
読みやすさとパフォーマンスを向上させるために、定数を定義します。
<code class="language-csharp">public static class FormatStrings { public const string DoubleFixedPoint = "0.###################################################################################################################################################################################################################################################################################################################################################"; }</code>
次に、次のように使用します。
<code class="language-csharp">doubleValue.ToString(FormatStrings.DoubleFixedPoint);</code>
重要な考慮事項:
この手法は科学表記法を効果的に防止しますが、ラウンドトリップを保証するものではないことを理解することが重要です。 結果の文字列を double に変換して戻すと、浮動小数点表現の固有の制限により、正確な元の値が得られない可能性があります。 完全なラウンドトリップが必要な場合は、カスタム書式設定オプションまたは代替データ型を検討してください。
以上が科学表記法を使用せずに .NET で Double を String に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。