人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: hogehoho
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● 0
●0ポイント

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


2 ● nattow
●50ポイント ベストアンサー

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

追記

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

↑こういうことです

◎質問者からの返答

ごめんなさい。

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

RoundDown (Currency)AAA みたいに><

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


3 ● もっけ
●0ポイント

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


4 ● じゅぴたー
●50ポイント

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

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
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ