小数で割り算 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
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 では除算エラーです。
> \は整数除算の演算子です。実数演算の演算子は/です。
演算時のデータ型について、少し補足しておきます。
/ 演算子 … 割り算を行う
「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 では除算エラーです。
投稿者 shu  (社会人)
投稿日時
2011/5/12 11:23:29
\は整数除算の演算子です。実数演算の演算子は/です。
c= a/b
とします。端数の処理をするのならこの計算のあとにInt,Fixとか
すればいいです。
c= a/b
とします。端数の処理をするのならこの計算のあとにInt,Fixとか
すればいいです。
投稿者 シン  (社会人)
投稿日時
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 )
とすると、誤差はあるでしょうが、それなりの数字がえられます。
でも、小数点以下のケタが多い時もあり、やはり誤差が気になります。
もっと良い方法はあるのでしょうか。
具体的には
Dim a, b, c As double
c = a \ b
とする場合、bが小数になる時があるのですが、その場合自動的に整数に(四捨五入?)されてしまうようで、正しい答えが得られずに困っています。
例 12 \ 0.6 = 12
c = ( a *1000 ) \ ( b * 1000 )
とすると、誤差はあるでしょうが、それなりの数字がえられます。
でも、小数点以下のケタが多い時もあり、やはり誤差が気になります。
もっと良い方法はあるのでしょうか。
環境はVB2010です。環境により計算方法が異なることには驚きました。
同じ「割り算」でも、演算子によりデータ型が変更される場合があるのですね。
わかりやすく説明していただきありがとうございます。
/演算子を使ってからInt関数を利用して、うまくいきました。
解決済みとさせていただきます。