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

解決


Dora  2004-04-08 01:06:21  No: 82909

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

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-08 03:04:55  No: 82910

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

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


Dora  URL  2004-04-09 03:30:26  No: 82911

書き込みありがとうございます。
早速試してみたのですが、うまくいきませんでした。
というのは たとえば 入力値が  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-09 07:14:51  No: 82912

通貨型 (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 20:55:45  No: 82913

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


Dora  2004-04-09 21:10:59  No: 82914

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 20:50:36  No: 82915

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加