
利息計算をVBAのユーザ定義関数で行ったところ、1円単位で合わないので
調べたところ、INT関数の挙動がおかしいみたいです。(下記のとおり割り切れる
のに、INT関数を使うと1ずれてしまう)
調べてもエクセルのINTとおなじく小数点以下を切り捨てる(整数ではrounddown(,0)と
同じと記載されてます。どうしてこうなるのか、ご教授願いないでしょうか。
Function test()
t = 0.142 / 200 * 10000000
test3 = Int(t)
End Function
結果:7099
Function test()
t = 0.142 / 200 * 10000000
test3 = t
End Function
結果:7100
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
お金を取り扱うための変数の型があるのになぜ使わないのですか。
なぜ型にルーズなまま小数点の計算をしようとするのですか。
Dim t As Currency
t = 0.142 / 200 * 10000000
MsgBox Int(t)
とか
Dim t As Variant
t = CCur(0.142 / 200 * 10000000)
MsgBox Int(t)
とか
No.3
- 回答日時:
・除算を伴う浮動小数点計算時における二進数と十進数変換時の誤差
・計算順序による誤差
例えば、1÷3×3の計算をする場合
1÷3の結果は0.333333...と無限に続き割り切れませんが、数値の
有効桁数には上限が有る為に、それを越えた値は削除されます。
その状態で、続きの×3をすると0.999999...となります。
普通に計算結果の値を表示する時には、有効桁数の範囲外の値も考慮
される為、1が表示されますが、INT関数を使った場合の表示は1には
なりません。
1×3÷3の様に、乗算を先に、除算を後になる様に、計算順序を入れ
替える事で、回避が可能な場合が有ります。
No.2
- 回答日時:
こんにちは!
浮動小数点誤差の影響だと思われます。
小数点以下の数値計算(特に時間計算など)は気を付ける必要があります。
2進数で計算する場合の宿命とも言われています。
0.142/200 の計算結果は0.00071 と表示されても内部では 0.00070999・・という計算結果になっていて
*10000000 とすると 7099.9・・ になり
INT関数を使ってしまうと、小数点以下が切り捨てられますので、7099 といった表示になるのでは?
無理やりって感じですが、小数点以下をある程度の桁数に丸めると解消されることがあります。
t = Int(WorksheetFunction.Round(0.142 / 200 * 10000000, 6))
としたらどうなりますか?m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
有効数字について 以前質問をし...
-
float型の精度(有効桁と実数)...
-
ExcelのINT関数の計算結果がお...
-
VB.net Double と...
-
fortranでx=1としても0.9..が入る
-
c languageで 簡単な質問があ...
-
10次の多項式を求めるプログラ...
-
色の判定
-
4096bitを95種類で表現すると何...
-
ExcelでPC(パソコン)によって...
-
三菱シーケンサ(Aシリーズ)で...
-
PICマイコンのアセンブラについて
-
どんな数字を入力してもaverage...
-
CASLIIの質問です。
-
最大50桁の実数の和・差・積を...
-
最早開始時間と最遅完了時刻を...
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
-
strncpyと_tcsncpy_sのヌルの扱...
-
プログラムでの数字につく”f”の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
EXCELの関数"STDEV(標準偏差)"...
-
ExcelでPC(パソコン)によって...
-
三菱シーケンサ(Aシリーズ)で...
-
floatの有効桁数
-
255の2の補数、B'00000001'が-...
-
O(n log n)について2
-
符号誤り率の計算は例題でどの...
-
CRCの計算方法について
-
VB.net Double と...
-
コンピューターは指数関数をど...
-
16進数 加算 減算 C言語
-
ExcelのINT関数の計算結果がお...
-
C言語でセルオートマトンを作成...
-
BCD・HEX・BINについて
-
”/”を使わずに割り算したいんで...
-
三角比の俯角の計算
-
除算を使わずに10で割りたい。
-
VBAでミリ秒まで出力する方法
おすすめ情報