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回まで
  • 13歳以上
  • 登録:2011/09/01 13:25:52
  • 終了:2011/09/06 22:56:50

ベストアンサー

id:nattow No.2

nattow回答回数102ベストアンサー獲得回数272011/09/01 13:47:08

ポイント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ベストアンサー獲得回数02011/09/01 13:36:22

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

id:nattow No.2

nattow回答回数102ベストアンサー獲得回数272011/09/01 13:47:08ここでベストアンサー

ポイント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ベストアンサー獲得回数22011/09/01 14:14:54DSから投稿

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

id:Jupiter2100 No.4

じゅぴたー回答回数444ベストアンサー獲得回数742011/09/01 19:43:01

ポイント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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません