web-dev-qa-db-ja.com

DoubleToString-科学的記数法なし

.NETがデフォルトでデフォルトで小数点以下の桁数が十分にある場合に科学的記数法を使用してDouble.ToString()を実行するというすばらしい「機能」に出くわしました。

_.005.ToString() // ".005"
.00005.ToString() // "5E-05" 
_

これを標準(非科学的)表記の文字列として表示する効率的な方法を知っている人はいますか?

私は この質問 を見てきましたが、上位2つの回答はどちらもDouble.ToString()を実行し、結果を再フォーマットするだけなので、私にはちょっとハックなようです。

助けてくれてありがとう。

編集:

必要な出力:

_.00005.ToString() == ".00005"
_

EDIT2:

すべての重複投票と近い投票とは何ですか?私は具体的に質問の中で同様の質問には満足のいく答えがないことを言います。このウェブサイトの人々はあまりにも力を幸せにします。

私の解決策:

誰にとっても役立つ場合:

_/// <summary>
/// Converts the double to a standard notation string.
/// </summary>
/// <param name="d">The double to convert.</param>
/// <returns>The double as a standard notation string.</returns>
public static String ToStandardNotationString(this double d)
{
    //Keeps precision of double up to is maximum
    return d.ToString(".#####################################################################################################################################################################################################################################################################################################################################");

}
_

注:これは1より大きい値に対してのみ機能します。すべての値に対してこれを行う効率的な方法はまだ見つかりません。

20
MgSam

標準 および カスタム数値形式文字列 を参照してください。 ".################"をお探しだと思います:

.00005.ToString(".################") // returns ".00005"

ややハックですが、小数点以下の桁数がそれほど多くない限り、機能します。その場合は、StringBuilderを使用して、文字列に約330個の#sを作成することをお勧めします(double.EpsilonはE-324のオーダーです)。

14
Tim S.