要するに、以下のToString()の行が私の期待に合わない理由は不思議です。C#float文字列フォーマットの理解に役立つ
float actual = 111253.469F;
double rounded = Math.Round(actual, 2); // 111253.47 (expected)
string stringified = actual.ToString(); // 111253.50 (expected 111253.469)
string currency = actual.ToString("C"); // $111253.50 (expected 111253.47 or possibly .46)
誰かが何が起こっているのか説明できますか?
注:浮動小数点数のその他の質問については、浮動小数点値は正確ではありません。しかし、私は問題の浮動小数点数の文字列値を反映するように文字列出力を期待しています。
この場合、クイックウォッチでブレークポイントを設定して 'actual'の値を見ると '111253.5'と表示されず、 '111253.469'と表示されます。私はそれがなぜ印刷されないのか理解できません。特に通貨の場合は、他のリテラル値を選択するのではなく、適切な小数点に丸めて表示することを期待しています。これは数学的な問題ではなく、ToString()の動作に関する質問です。
編集:以下 パーQuanticのさんのコメント、ToString
がここで見られる数で、その結果、7桁の数を制限し、デフォルトでG
形式を使用して表示されます。 MSDN about Single.ToString()(強調鉱山)によれば
不可能。 111253は決して出力として11253を与えません –
@ThomasWeller申し訳ありませんが、私のコメント行は不正確です(最初の1文字は削除されました)が、私を投げている小数点です。私は訂正します。 – SWC
小数点2桁の数値を使用する場合は、次のサンプルを使用できます。ToString( "0.00"); ToString( "n2"); //番号の場合 ToString( "c2"); //通貨の場合 – tdog