
利息計算を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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
演算について
-
O(n log n)について2
-
c languageで 簡単な質問があ...
-
C言語でセルオートマトンを作成...
-
2進数の0.2?
-
計算の丸め誤差の解消について
-
2の補数について
-
VBAでの割り算の余りの求め方
-
floatの有効桁数
-
2進数データのビット演算
-
C言語プログラミングにて、arct...
-
このC言語プログラムでどこをい...
-
EXCELの関数"STDEV(標準偏差)"...
-
2038年問題 日付算出
-
三菱シーケンサ(Aシリーズ)で...
-
ExcelでPC(パソコン)によって...
-
データ型 double の桁数について
-
「Aに対するBの割合」と「Aに対...
-
複数桁10進数の*桁目だけを抽出...
-
fgetsなどのときのstdinのバッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
有効数字について 以前質問をし...
-
三菱シーケンサ(Aシリーズ)で...
-
ExcelでPC(パソコン)によって...
-
c languageで 簡単な質問があ...
-
ExcelのINT関数の計算結果がお...
-
VB.net Double と...
-
VBAでミリ秒まで出力する方法
-
16進数 加算 減算 C言語
-
EXCELの関数"STDEV(標準偏差)"...
-
floatの有効桁数
-
除算を使わずに10で割りたい。
-
計算の丸め誤差の解消について
-
VB6.0での小数点の扱いについて
-
コンピューターは指数関数をど...
-
2038年問題 日付算出
-
時刻の比較
-
2進数、16進数、10進数のことを...
-
浮動小数演算は実行環境の変化...
-
2進数の足し算(C言語)
おすすめ情報