小数で割り算

タグの編集
投稿者 シン  (社会人) 投稿日時 2011/5/12 10:54:40
小数で割り算ができる良い方法はあるのでしょうか。
具体的には

Dim a, b, c As double
c = a \ b

とする場合、bが小数になる時があるのですが、その場合自動的に整数に(四捨五入?)されてしまうようで、正しい答えが得られずに困っています。
例 12 \ 0.6 = 12

c = ( a *1000 ) \ ( b * 1000 )
とすると、誤差はあるでしょうが、それなりの数字がえられます。
でも、小数点以下のケタが多い時もあり、やはり誤差が気になります。

もっと良い方法はあるのでしょうか。
投稿者 shu  (社会人) 投稿日時 2011/5/12 11:23:29
\は整数除算の演算子です。実数演算の演算子は/です。

c= a/b

とします。端数の処理をするのならこの計算のあとにInt,Fixとか
すればいいです。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/5/12 12:10:09
質問時には、お使いの環境も明記してくださいね。

> \は整数除算の演算子です。実数演算の演算子は/です。

演算時のデータ型について、少し補足しておきます。

/ 演算子 … 割り算を行う
 「Double / Double」の場合、結果も Double です(VB6 も VB.NET も)。
 Double 型同士の除算であれば、計算前に型変換は発生しません(VB6 も VB.NET も)。
 割る数が 0.0 の場合、VB.NETでは+∞もしくは-∞になります。VB6 では除算エラーです。

\ 演算子 … 割り算の商を求める
 「Double \ Double」の場合、結果は Long です(VB6 も VB.NET も)。
 また、計算前に Double 型は Long 型に丸められます(VB6 も VB.NET も)。
 割る数が 0 に丸められた場合、除算エラーが発生します(VB6 も VB.NET も)。

Mod 演算子 … 割り算の余りを求める
 「Double Mod Double」の結果は、VB.NET では Double、VB6 は Long です。
 VB6 の場合、計算前に Double 型が Long 型に丸められます(VB.NET では Double のまま)。
 割る数が 0.0 の場合、VB.NETでは+∞もしくは-∞になります。VB6 では除算エラーです。
投稿者 シン  (社会人) 投稿日時 2011/5/12 17:41:06
shuさん、魔界の仮面弁士さん、ご返答していただきありがとうございます。

環境はVB2010です。環境により計算方法が異なることには驚きました。

同じ「割り算」でも、演算子によりデータ型が変更される場合があるのですね。
わかりやすく説明していただきありがとうございます。

/演算子を使ってからInt関数を利用して、うまくいきました。

解決済みとさせていただきます。