tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^4: 数字の比較について(ありがとうございます)
投稿日: 2017/01/20(Fri) 19:35
投稿者魔界の仮面弁士
> よかった。^演算子が使えないですか

^演算の結果は常に Double 固定ですし、各項も事前に Double 化されます。
(VB.NET の ^演算子は、コンパイル時に Math.Pow での呼び出しへと変わります)


VB6/VBA も、第一項、第二項、演算結果すべてが Double 型で処理される仕様です。
――厳密に言えば、Variant型(内部形式 vbDouble もしくは vbNull)にもなりえますが。


とはいえ、Integer ^ Integer などの場合は、結果が整数であることが明確なので、
結果が Double だったとしても、そのまま結果を CInt や CLng するだけで十分かと。


もし、Decimal ^ Integer での演算を求めるなら、For ループで乗除算を繰り返すための
 Function Power(base As Decimal, exponent As Integer) As Decimal
な拡張メソッドを用意してやれば対処できます。



> 統一は止めときます

No11788 にも書きましたが、統一はするべきです。VB6 でも VB.NET でも。

ただ、すべてを一つのデータ型で補うのは現実的には無理なので、
要所要所で明示的に型変換することになりますね。

各データ型の特性を把握した上で、丸め誤差、桁落ち、情報落ちを
防ぐようなコーディングを心がけましょう。



VB.NET 型名   VBA の型名   サイズ     符号桁   有効桁数   小数部の長さ
-----------   ----------   -------    ------   --------   --------------------
Double        Double        64 bit    1 bit    1+52 bit   11 bit (-1022〜1023)
Single        Single        32 bit    1 bit    1+23 bit    8 bit (-126〜127)
Decimal       (Deciaml)    128 bit    8 bit      96 bit    8 bit (0〜28)
-             Currency      64 bit    1 bit      63 bit    0 bit (4)
ULong         -             64 bit    0 bit      64 bit    0 bit (なし)
Long          LongLong      64 bit    1 bit      63 bit    0 bit (なし)
UInteger      -             32 bit    0 bit      32 bit    0 bit (なし)
Integer       Long          32 bit    1 bit      31 bit    0 bit (なし)
UShort        -             16 bit    0 bit      16 bit    0 bit (なし)
Short         Integer       16 bit    1 bit      15 bit    0 bit (なし)
Byte          Byte           8 bit    0 bit       8 bit    0 bit (なし)
SByte         -              8 bit    1 bit       7 bit    0 bit (なし)
UIntPtr       -            32 / 64    0 bit     32 / 64    0 bit (なし)
IntPtr        LongPtr      32 / 64    1 bit     31 / 63    0 bit (なし)

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。