ACCESSVBAの質問です。下記のようなプログラムがあります。

1.4かける355を計算すると497のはずが496になってしまいます。
どなたか解決方法を教えてください。

Function RoundDown(X As Double, s As Integer) As Double

Dim T As Currency, w As Long

T = 10 ^ Abs(s) '単位調整用WK
If s > 0 Then '少数部か整数部かの判断
'少数部での切り捨て処理
If (Len(CStr(X)) - Len(Left(CStr(X), InStr(CStr(X), ".")))) <= s Then
RoundDown = X
Else
RoundDown = Int(X * T) / T
End If
Else
'整数部での切り捨て処理
RoundDown = Int(X / T * T)
End If
End Function

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/09/06 22:56:50
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:nattow No.2

回答回数102ベストアンサー獲得回数27

ポイント50pt

RoundDown 関数の第一引数を Currency 型にすれば正しく処理されると思います。

追記

Function RoundDown(X As Currency, s As Integer) As Double

↑こういうことです

id:hogehoho

ごめんなさい。

具体的に記入していただけないでしょうか?

RoundDown (Currency)AAA みたいに><

ごめんなさい。よろしくお願いします。

2011/09/01 14:02:15

その他の回答3件)

id:kento_06_04 No.1

回答回数9ベストアンサー獲得回数0

もしかしたらPCのプログラムが四捨五入してそうなってるかも          それと、pcを買った所にお取合せしてみたら?

id:nattow No.2

回答回数102ベストアンサー獲得回数27ここでベストアンサー

ポイント50pt

RoundDown 関数の第一引数を Currency 型にすれば正しく処理されると思います。

追記

Function RoundDown(X As Currency, s As Integer) As Double

↑こういうことです

id:hogehoho

ごめんなさい。

具体的に記入していただけないでしょうか?

RoundDown (Currency)AAA みたいに><

ごめんなさい。よろしくお願いします。

2011/09/01 14:02:15
id:yumenamako No.3

回答回数47ベストアンサー獲得回数2DSから投稿

最終的に自力で計算する!

id:Jupiter2100 No.4

回答回数444ベストアンサー獲得回数74

ポイント50pt

この部分で桁あふれを起こしているのでしょう。

T = 10 ^ Abs(s)


関数を下記のようにしてみてください。

Function RoundDown(X As Double, s As Integer) As Double
    Dim n As Boolean
    Dim m As Double
    Dim i As Long
    m = X * s
    If (m < 0) Then
        n = False
    Else
        n = True
    End If
    i = Int(m)
    m = m - i
    If (m = 0) Then
        RoundDown = i
    Else
        RoundDown = i + 1
    End If
End Function

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません