プロが教える店舗&オフィスのセキュリティ対策術

Option Compare Database
Public Function RoundDown(X As Double, s As Integer) As Double
Dim t As Integer
t = 10 ^ Abs(s)
If s > 0 Then
RoundDown = Int(X * t) / t
Else
RoundDown = Int(X / t) * t
End If
End Function

というモジュールをつかって値の切り捨てをおこなっていましたが、マイナスの値がうまく動きません。
どなたか教えていただけないでしょうか。

A 回答 (4件)

maokunさん


マイナスの値が上手く働かないとはなにを指してますか?

X = 1.12
s = 1
A = 1.1

X = 1.12
s = -1
A = 0

X = -1.12
s = 1
A = -1.2

X = -1.12
s = -1
A = -10

となると思いますがどこの答えに納得がいかないのかな?
    • good
    • 0

負の数の場合、Int関数でなくFix関数を使えばお望みの結果が出るのでは?

    • good
    • 0

ええとですね。


int関数は、負の時は桁上げします。
なのでint関数の替りにFix関数を使って見て下さい。

MyNumber = Int(99.8)  ' 99 を返します。
MyNumber = Fix(99.2)  ' 99 を返します。

MyNumber = Int(-99.8)  ' -100 を返します。
MyNumber = Fix(-99.8)  ' -99 を返します。
    • good
    • 0

下記のようにすると正負ゼロとも同じ処理になりますが・・・


Int、Fixどちらでも同じ値でしょう。
質問のモジュールは Abs(s)>=5 でエラー?

'sが正は小数桁方向で作成
Public Function RoundDown2(X As Double, s As Integer) As Double
  RoundDown2 = Sgn(X) * Int(Abs(X) * 10 ^ s) / 10 ^ s
End Function
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!