タイトル : Re^9: 塗りつぶし(黒)の円をPC画面中央に配置する 投稿日 : 2015/04/16(Thu) 03:29 投稿者 : 魔界の仮面弁士
> ⇒Integer/Rectangle または Single/RectangleF 型だけしか指定できないというのはどのような物を > 見たら理解出来ますでしょうか? ヘルプで FillEllipse メソッドについてみてみると、4 種類のオーバーロードが あることがわかります。そこに、Decimal 型を受け付ける物はありませんよね。 https://msdn.microsoft.com/ja-jp/library/system.drawing.graphics.fillellipse.aspx また、たとえヘルプを引かずとも、コーディング中の入力ヒントにおいても、 各オーバーロードの定義を確認することができます。 > > 数値の末尾に R または # を付けた場合は Double 型を意味します。 > > 数値の末尾に F または ! を付けた場合は Single 型を意味します。 > > 数値の末尾に D または @ を付けた場合は Decimal 型を意味します。 > ⇒CDbl、CSng、CDECと同じ意味という理解で宜しいでしょうか? ちょっと違います。 CDbl 等で型を後から変換するのではなく、最初から適切な型のリテラルで記述するということです。 たとえば Dim s As String = "123" と書くべきところで、わざわざ Dim s As String = CStr(123) と書いたりはしませんよね。CStr で文字列化せずとも、最初から文字列リテラルで書けば良いわけで。 それに小数値の場合、データ型によって格納精度が異なりますから、 後付けでデータを変換する方法だと、どの段階で変換するのかによって、 誤差が丸められてしまうなどして、データに微細なズレが生じることがあります。 > ⇒基本データ型で非整数型(Demical,Double,Single)や整数型(SByte,Short,Integer,Long)で、 > 例えば同じ非整数型であっても使い分けがよく分からなく適当にしているのが現状です。どういった基準で > 選択したら良いでしょうか? (大学の卒業という話をしていましたが、そういうところは講義で触れられているのでは…?) えぇと、Single や Double などは「浮動小数点型」と呼ばれる型です。 算数用語でいうところの『概数』を扱う型だと思って下さい。 非常に大きな値から非常に小さな値まで扱えるのが特徴で、 「負の無限大」「正の無限大」「非数値」という特殊な値も管理します。 科学計算や物理計算などを扱うのに向いています。 CPU 側にも、浮動小数点演算のための専用命令(あるいはユニット)を備えていることから、 処理速度が速いこともメリットです(整数型の処理速度には敵いませんが)。 Graphics クラスが Single 型を使う仕様になっているのも、こうした理由からですね。 その代りあくまで概数なので、取り扱われる値は近似値となります。 内部的には 二進数の小数で値を管理しているため、0.5 や 0.75 といった値なら 誤差なく扱えるのですが、0.1 などの値は近似値となってしまいます。 この点がデメリットとなりますね。 そこで、金額計算などのように誤差が許されない場面では、代わりに Decimal が使われます。こちらは十進数の小数を誤差なく扱えますが、 その分、メモリ効率や演算速度といった面ではは劣ります。その上、取り扱える値の範囲も、 Single や Double に比べると圧倒的に狭いものとなってしまいます。 とはいえ、金額計算に使う分には、十分な桁数ではあるですけれどね。 今回の場合、最終目標は画面上への描画処理ですから、 Decimal ではなく Single を使う方が適切だと思いますよ。 |