- PR -

ToString の結果がちがう

投稿者投稿内容
きのぴお
常連さん
会議室デビュー日: 2003/07/11
投稿数: 23
投稿日時: 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フレームワークのバグなんでしょうか?

ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-03-16 14:07
こんにちは。

バグかどうかは分かりませんが、参考として。
きのぴおさんのコードを .net Compact Framework 2.0 + C# で実行すると 「4のところで 0.00000000000 と表示」になります。
きのぴお
常連さん
会議室デビュー日: 2003/07/11
投稿数: 23
投稿日時: 2006-03-16 14:25
ue さん、早速のコメントありがとうございます。

.net Compact Framework 2.0 では期待とおりの結果のようですね。
情けない話、自分がいま.net Compact Framework 2.0環境かどうかわかってないんです。
これってどうやったら調べれるんでしょうか?
教えていただけませんか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-16 14:34
引用:

きのぴおさんの書き込み (2006-03-16 14:25) より:

情けない話、自分がいま.net Compact Framework 2.0環境かどうかわかってないんです。
これってどうやったら調べれるんでしょうか?

引用:

環境 VS2003 C# です。


ご自分で、「1.1 である」と言われているように思えるのですが、
2005 もインストールした記憶があるということでしょうか?

本題の方ですが、「書式指定」をしないオーバーロードだとどうなりますか?
Decimal なので演算誤差は考えにくいですが。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
きのぴお
常連さん
会議室デビュー日: 2003/07/11
投稿数: 23
投稿日時: 2006-03-16 14:50
じゃんぬねっと さん、こんにちは。早速のコメントありがとうございます。

VS2005は導入しておりません。ということは .net Compact Framework 2.0 環境ではないということでしょうか?

あと、ToString()に書式を指定しないで試しました。
System.Windows.Forms.MessageBox.Show("decKINGAKU => "+decKINGAKU.ToString());
これで試すと4.のところでもマイナス記号は表示されませんでした。

参ったなぁ、書式を指定するのがいけないのかなぁ...
きのぴお
常連さん
会議室デビュー日: 2003/07/11
投稿数: 23
投稿日時: 2006-03-16 14:54
きのぴおです。

コントロールパネルのプログラムの追加と削除で確認すると
.Net Framework 1.1 と表示されていました。お騒がせしました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-16 15:22
引用:

きのぴおさんの書き込み (2006-03-16 14:50) より:

参ったなぁ、書式を指定するのがいけないのかなぁ...


次に整数として試してみてください。
書式設定にしても浮動小数が原因かもしれません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
きのぴお
常連さん
会議室デビュー日: 2003/07/11
投稿数: 23
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)