私は、.NETがデフォルトでを行う素晴らしい "機能"を見つけました。十分な小数点以下の桁数があれば科学的表記法を使用しています。Double ToString - 科学的表記なし
.005.ToString() // ".005"
.00005.ToString() // "5E-05"
標準(非科学的)表記の文字列として表示する効率的な方法を知っている人はいますか?
私はthis questionを見ましたが、どちらもDouble.ToString()
を実行して結果を再フォーマットするだけで、上位2つの答えが私にはハックのようです。
ありがとうございました。
EDIT:
所望の出力:
.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でしか動作。
あなたは、コンピュータの金属のところで、浮動小数点数は何番目の2進数表記に格納されていることに気付きました。これは皮肉な "特徴"ではない。その振る舞いは型に不可欠です。浮動小数点数を純粋に10進形式で表示することは可能ですが(私はTim Sの答えをサポートしています)、2.68E201のような数値は単純に*ロット*がゼロになります。 – KeithS
@KeithS ToString()は、ハードウェアに関係なく、一貫した動作をする必要があります。それはすべての現代のプログラミングが基づいている抽象化の全体のポイントです。科学記法で何かを得ることが期待される人は、それを明記するだろう。 – MgSam
私はもはや答えることはできませんが、 'double'を' decimal'にキャストしてからToString()を実行することができます。私は、より高速な '10進数'または300文字を超えるフォーマット文字列であるパフォーマンステストを行っていません。 – ygoe