2

私はおそらく非常に明白なものを見ないための非常に大きなばかですが、今何を確認できるかわかりません.

問題はこれです。このコードがあれば

decimal d = 45550M;
string s = string.Format("{0}", d);

結果が"45550,00"の代わりになることがあり"45550"ます。そして、何が原因なのかわかりません。

何を確認できますか?String.Format が常に同じように動作しない原因は何ですか?

4

3 に答える 3

5

10 進数値には、特定の倍率があります。10 進値に対して実行する操作によっては、倍率が変わる場合があります。

10 進数は、符号、値の各桁の範囲が 0 ~ 9 の数値、および整数部分と小数部分を区切る浮動小数点の位置を示すスケーリング係数で構成される浮動小数点値です。数値の。

小数点以下の桁数を指定しない限り、小数点以下の桁数はデフォルトで小数点以下の倍率に一致します。

スケーリング係数は、10 進数の末尾のゼロも保持します。末尾のゼロは、算術演算または比較演算の 10 進数の値には影響しません。ただし、適切な書式文字列が適用されている場合は、ToString メソッドによって末尾のゼロを明らかにすることができます。

例:

var x = 100m;
var y = x * 1.00m;

string s1 = string.Format("{0}", x); // "100"
string s2 = string.Format("{0}", y); // "100.00"
于 2012-11-12T13:30:15.183 に答える
3

書式設定に使用する明示的なカルチャを指定していないため、結果はマシンによって異なります。そのため、ランタイムは現在のスレッド カルチャを使用します。これは、実際にはマシンで構成されたものになります。

于 2012-11-12T13:09:55.400 に答える
2

string.Format("{0:0}", d);常に 0 の 10 進数を出力する必要があります ("45550")

于 2012-11-12T13:10:10.413 に答える