第1回 The 祭り(AQUA's .NET 奮闘記)より:
フライングした、バグっているコードを、もうちっと発展させてちゃちゃっと作ってみました。
で、気がついたこと。
まず、小数点の扱い。これが、最初は抜けていたわけで。フライングの方は、入力値を文字列として扱っているので、そのまま右に文字を連結していけばok。一旦数字に直すという、野暮なことをしてしまっていました。
今回、decimal として持たせたのですが、小数点の入力をするまでは、今の数字を10倍して、入力した値を足せば、新しい入力値となります。
しかし、小数点から右は?手っ取り早く、今の入力値を文字列にして、右に文字列連結。そして decimal に戻すとしました。どなたかが書かれています、「すでに入力した?」は、文字列にして、ピリオドを探すという方法をとりました。
ところが。今度は表示で問題が発生しました。
0.2 + 0.8 = を入力すると、1.0 になります。で、1.02 + 0.08 + 0.9 = だと、1.00 になります(decima.ToString メソッドを、引数無しで使用)。
つまり、今まで表示した桁数を憶えているということです。
う~ん、困った。どこで、どうやって消してやろう???
そして、桁数。とりあえず、表示している桁数と記憶している桁数があっていない。だめじゃん。
入力時は、小数点や負号をのぞいて10桁の数字を憶えています。憶えているわけじゃないな。10桁で入力させていません。しかし、計算結果については、decimal の範囲だけ憶えています。じゃないと、10/3*3 が 10 にならないので。
あ?あれれ?仕様を5個しか満たしていないorz→プロジェクト ファイルをダウンロード
投稿日時 : 2007年7月3日 21:55