- - PR -
ToString の結果がちがう
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-16 13:25
こんにちは、きのぴおです。
Windows アプリケーションで作成したプログラムと スマートデバイスアプリケーションで作成したプログラムで ToString()メソッドの結果が期待したものと違っておりハマってます。 環境 VS2003 C# です。 テスト手順 Windows アプリケーション と スマートデバイスアプリケーション を作成します。 フォームにボタンを貼り付けてクリックイベントにこのように記述します。 private void button1_Click(object sender, System.EventArgs e) { Decimal decKINGAKU=0; Decimal a=0; Decimal b=2340; Decimal c=0; Decimal d=2340; decKINGAKU = a; System.Windows.Forms.MessageBox.Show("decKINGAKU => "+decKINGAKU.ToString("0.00000000000"));//1 decKINGAKU -= b; System.Windows.Forms.MessageBox.Show("decKINGAKU => "+decKINGAKU.ToString("0.00000000000"));//2 decKINGAKU -= c; System.Windows.Forms.MessageBox.Show("decKINGAKU => "+decKINGAKU.ToString("0.00000000000"));//3 decKINGAKU += d; System.Windows.Forms.MessageBox.Show("decKINGAKU => "+decKINGAKU.ToString("0.00000000000"));//4 } 実行結果 Windows アプリケーションの場合 1のところで 0.00000000000 と表示 これは予想通り 2のところで -2340.00000000000 と表示 これは予想通り 3のところで -2340.00000000000 と表示 これは予想通り 4のところで 0.00000000000 と表示 これは予想通り しかし スマートデバイスアプリケーションの場合 1のところで 0.00000000000 と表示 これは予想通り 2のところで -2340.00000000000 と表示 これは予想通り 3のところで -2340.00000000000 と表示 これは予想通り 4のところで -0.00000000000 と表示 なぜマイナス記号が表示される?? ここがハマッてるとこです。 どうやれば4.のところでWindows アプリケーションの場合と同じ 0.00000000000 と表示されるんでしょうか? これは.Netフレームワークのバグなんでしょうか? | ||||||||
|
投稿日時: 2006-03-16 14:07
こんにちは。
バグかどうかは分かりませんが、参考として。 きのぴおさんのコードを .net Compact Framework 2.0 + C# で実行すると 「4のところで 0.00000000000 と表示」になります。 | ||||||||
|
投稿日時: 2006-03-16 14:25
ue さん、早速のコメントありがとうございます。
.net Compact Framework 2.0 では期待とおりの結果のようですね。 情けない話、自分がいま.net Compact Framework 2.0環境かどうかわかってないんです。 これってどうやったら調べれるんでしょうか? 教えていただけませんか? | ||||||||
|
投稿日時: 2006-03-16 14:34
ご自分で、「1.1 である」と言われているように思えるのですが、 2005 もインストールした記憶があるということでしょうか? 本題の方ですが、「書式指定」をしないオーバーロードだとどうなりますか? Decimal なので演算誤差は考えにくいですが。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-16 14:50
じゃんぬねっと さん、こんにちは。早速のコメントありがとうございます。
VS2005は導入しておりません。ということは .net Compact Framework 2.0 環境ではないということでしょうか? あと、ToString()に書式を指定しないで試しました。 System.Windows.Forms.MessageBox.Show("decKINGAKU => "+decKINGAKU.ToString()); これで試すと4.のところでもマイナス記号は表示されませんでした。 参ったなぁ、書式を指定するのがいけないのかなぁ... | ||||||||
|
投稿日時: 2006-03-16 14:54
きのぴおです。
コントロールパネルのプログラムの追加と削除で確認すると .Net Framework 1.1 と表示されていました。お騒がせしました。 | ||||||||
|
投稿日時: 2006-03-16 15:22
次に整数として試してみてください。 書式設定にしても浮動小数が原因かもしれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-16 17:25
じゃんぬねっと さん、こんにちは。
int で試してみました。 4.のところでマイナス記号は表示されずに「0」と表示されました。 ますます、Decimal型(浮動小数点の処理?)が怪しいのでしょうか? 試したコード int decKINGAKU=0; int a=0; int b=2340; int c=0; intl d=2340; decKINGAKU = a; System.Windows.Forms.MessageBox.Show("decKINGAKU => "+decKINGAKU.ToString("0"));//1 decKINGAKU -= b; System.Windows.Forms.MessageBox.Show("decKINGAKU => "+decKINGAKU.ToString("0"));//2 decKINGAKU -= c; System.Windows.Forms.MessageBox.Show("decKINGAKU => "+decKINGAKU.ToString("0"));//3 decKINGAKU += d; System.Windows.Forms.MessageBox.Show("decKINGAKU => "+decKINGAKU.ToString("0"));//4 |