利息計算を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も見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
フォントについて教えてください!
みなさんの一番好きなフォントは何ですか? よく使うフォントやこのフォント好きだなあというものをぜひ教えてください!
-
治せない「クセ」を教えてください
なくて七癖という言葉どおり、人によっていろいろなクセがありますよね。 あなたには治せないクセがありますか?
-
何歳が一番楽しかった?
自分の人生を振り返ったとき、何歳のころが一番楽しかったですか? 子供の頃でしょうか、それとも大人になってからでしょうか。
-
我がまちの「給食」自慢を聞かせてっ!
富山県の給食には「ベニズワイガニ」が出る、、、なんて話を聞いたことがあります。 日本全国「え、給食にそれ出るの!?」な驚きメニューがまだまだあるはず!
-
ExcelのINT関数の計算結果がおかしい。
Excel(エクセル)
-
VBAで入力数値について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
有効数字について 以前質問をし...
-
O(n log n)について2
-
ExcelでPC(パソコン)によって...
-
数値の誤差
-
べき指数の求め方
-
2進数データのビット演算
-
時刻の比較
-
C言語で確実に論理右シフトをす...
-
VBAのINT関数について
-
VB.net Double と...
-
【C言語】RGBと輝度の計算に関して
-
色の判定
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
Enterキーを押されたら次の処理...
-
2÷3などの余りについて
-
中学生で数学です。 √84nが自然...
-
visualstudio C# テキストボッ...
-
シェルピンスキーのギャスケット
-
C言語 エラーの原因がわからな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
有効数字について 以前質問をし...
-
VB.net Double と...
-
16進数 加算 減算 C言語
-
三菱シーケンサ(Aシリーズ)で...
-
c languageで 簡単な質問があ...
-
ExcelのINT関数の計算結果がお...
-
除算を使わずに10で割りたい。
-
VBAでミリ秒まで出力する方法
-
2進数の足し算(C言語)
-
EXCELの関数"STDEV(標準偏差)"...
-
ExcelでPC(パソコン)によって...
-
計算の丸め誤差の解消について
-
”/”を使わずに割り算したいんで...
-
floatの有効桁数
-
100桁の計算ができなくて困って...
-
時刻の比較
-
距離から緯度経度を求める方法
-
どんな数字を入力してもaverage...
-
VB6.0での小数点の扱いについて
おすすめ情報