VB6で浮動少数型のMOD剰余を求めるには?

解決


Dora  2004-04-07 16:06:21  No: 82909  IP: [192.*.*.*]

はじめまして。
初心者です。

VB6.0において、剰余を求めるMOD関数は浮動少数に対応していないのですが、
これらを実現するのに何かいい方法はございますでしょうか?

ランタイムにあるfmodのような関数が理想ですが。

現在はVB6.0で

Public Function fmod(src1 As Double, src2 As Double) As Double
    
    fmod = (src1 * 10) Mod (src2 * 10)

End Function

としています。
これは、少数1桁のみ対応ですが、2桁となると値をまるめてしまいます。

どなたかいい方法があればご教授願います。

編集 削除
うにぃ  2004-04-07 18:04:55  No: 82910  IP: [192.*.*.*]

適当ですが、こんなのはどうなんでしょうか。

Public Function fmod(a As Double, b As Double) As Double
    fmod = a - Int(a / b) * b
End Function

編集 削除
Dora  URL  2004-04-08 18:30:26  No: 82911  IP: [192.*.*.*]

書き込みありがとうございます。
早速試してみたのですが、うまくいきませんでした。
というのは たとえば 入力値が  0.1単位であるかとか 0.5単位か判断したい
わけですが、以下のような判断文ですとうまくいきませんでした。
おそらくまるめ誤差が発生しているものと思います。

Private Sub Command1_Click()
    Dim a As Double
    Dim b As Double
    Dim c As Double
    
    a = 1.2
    b = 0.1
    c = fmod2(a, b)
    If  c = 0 Then
        Call MsgBox("OK : " & c)
    Else
        Call MsgBox("NG : " & c)
    End If
End Sub

Public Function fmod(a As Double, b As Double) As Double
    fmod = a - Int(a / b) * b
End Function

どうしたものでしょうか。
初心者で申し訳ありません。

編集 削除
oku  URL  2004-04-08 22:14:51  No: 82912  IP: [192.*.*.*]

通貨型 (Currency)でやってみてはどうですか?
Public Function fmod2(ByVal a As Currency, ByVal b As Currency) As Currency
    fmod2 = a - Int(a / b) * b
End Function

編集 削除
うにぃ  2004-04-09 11:55:45  No: 82913  IP: [192.*.*.*]

浮動小数点型を扱う限りは誤差はつき物です。
どの程度の精度が必要なのかはわかりませんが、
浮動小数点型を使う必要がないのであれば、使わないほうがよいです。
okuさんの書かれておられるとおり、通貨型などの固定小数点のデータ型を使用したほうがよいです。

編集 削除
Dora  2004-04-09 12:10:59  No: 82914  IP: [192.*.*.*]

oku様、書き込み有難うございます。
通貨型で問題なく解決できました。
今回はまことに有難うございました。m(__)m

Private Sub Command1_Click()
    Dim a As Double
    Dim b As Double
    Dim c As Double
    
    a = 1.2
    b = 0.1
    c = fmod2(a, b)
    If  c = 0 Then
        Call MsgBox("OK : " & c)
    Else
        Call MsgBox("NG : " & c)
    End If
End Sub
Public Function fmod2(ByVal a As Currency, ByVal b As Currency) As Currency
    fmod2 = a - Int(a / b) * b
End Function

編集 削除
Dora  2004-04-11 11:50:36  No: 82915  IP: [192.*.*.*]

うにぃ様
アドバイスありがとうございます。

今回は、入力値に対して、単位入力をチェックするためだけですので通貨型で
問題ないと思われます。ありがとうございました。

編集 削除