2

次のコードを検討してください。

var rateUsed = 0.00000001;
var rateUsedConvertToString = Convert.ToString(rateUsed);
var rateUsedToString = rateUsed.ToString();

私の文字列は「0.00000001」ではなく、両方とも「1E-08」です。rateUsed の初期型を制御できません。これは double であり、double の正確な文字列表現が必要です。

これが double 値として開始された場合、0.00000001 を文字列として取得するにはどうすればよいでしょうか?

4

3 に答える 3

6

特定の形式が必要な場合は、パラメーターを介して必要なものを指定する必要があります。利用可能な標準形式はここにありますが、カスタム形式を使用することもできます。ToString(format)選択した形式をまたはのいずれかに渡しますConvert.ToString(value, format)

ノート; 1E-8 は正確に 0.00000001 です。これは単に指数表記を使用しているためです。つまり、これは 1×10 -8です。

デフォルトの形式は「一般」で、次のように記述されています。

結果: 固定小数点または科学的表記法のいずれかで最もコンパクト

そうです、科学的 (別名指数) 表記を使用する場合があります。具体的には、それが固定小数点表記よりも短い場合は常にそうします。たぶん使ってみて.ToString("F")

于 2013-08-21T12:31:05.990 に答える
2

Double.ToString () が指数表記で値を返すのはいつですか?

そうは言っても、@MarcGravellが推測したように、1E-08= 0.00000001、科学表記法で表示されただけです。10 進数 (通常) として出力するものを探している場合は、別の書式設定を検討することをお勧めします。そのような:

var rateUsed = 0.00000001;
var rateUsedToStringFormatted = rateUsed.ToString("0.########"); // 0.00000001

別のオプションは、この変換を一貫して実行するカスタムIFormatProvider/を作成することです。次に、どこでもICustomFormatter使用する代わりに、より一貫性のある出力を提供できます (後で変更する場合は、1 つの場所で変更します)。.ToString("0.########").ToString(MyDoubleFormatter)

于 2013-08-21T12:32:53.023 に答える
2

おそらく、固定小数点 ("F") 形式指定子を、形式指定子文字列を受け入れる別のオーバーロードで使用する必要があります。ToString

int num = 175;
Console.WriteLine(num.ToString("F", CultureInfo.InvariantCulture));  // 175.00
Console.WriteLine(num.ToString("F3", CultureInfo.InvariantCulture)); // 175.000 

または、カスタム書式指定子を使用できます。

Console.WriteLine(num.ToString("00000.00", CultureInfo.InvariantCulture)); // 00175.00

さらに、これらの例に示されているように、値をテキスト表現に変換するときはいつでもCultureInfo.InvariantCulture、現在のスレッドのカルチャとは無関係に格納する必要があるデータに対して使用することを検討してください (たとえば、データをファイルに書き込む場合など)。

于 2013-08-21T12:33:59.900 に答える