
Access2002 windows2000
仮に フォーム名:計算フォーム テキストボックス名:txt答え コマンドボタン:cmd実行 を作ります。
cmd実行をクリックしたとき次の計算を実行さします。
Me![txt答え]=Int(500000*(29.2/100/365)*36)
すると txt答え に表示されるのは 14399です。
小数点以下はない筈ですのに切り捨てられたような結果が出てきます。
クエリのビルドを使って計算式を記述し計算さすと 14400になります。
エクセルで試しても 14400になります。
とても悩んでいます。
どちら様か教えていただけませんか?
No.3ベストアンサー
- 回答日時:
こんにちは。
私も小数点以下の誤差には悩まされました。
で、誤差を無くすには、計算結果を[貨幣型]の変数に一度格納するとうまくいきます。
(ヘルプで[Fieldsize]を検索して、一番最後の[ヒント]を参照してください)
こちらで確認した内容
----------------------------------------------------------------------
Dim ANS_1 As Currency
'
ANS_1 = 500000 * (29.2 / 100 / 365) * 36
Me![txt答え] = Int(ANS_1)
Me![txt答え1] = ANS_1
Me![txt答え2] = 500000 * (29.2 / 100 / 365) * 36
Me![txt答え3] = Int(500000 * (29.2 / 100 / 365) * 36) - _
(500000 * (29.2 / 100 / 365) * 36)
Me![txt答え4] = ANS_1 - (500000 * (29.2 / 100 / 365) * 36)
各値の結果
Me![txt答え] :14400
Me![txt答え1]:14400
Me![txt答え2]:14400
Me![txt答え3]:-0.99999999999965
Me![txt答え4]:0
----------------------------------------------------------------------
または、全ての要素を[貨幣型]の変数にしても良いようです。
----------------------------------------------------------------------
Dim SET_1 As Currency
Dim SET_2 As Currency
Dim SET_3 As Currency
Dim SET_4 As Currency
Dim SET_5 As Currency
Dim ANS_1 As Currency
'
SET_1 = 500000
SET_2 = 29.2
SET_3 = 100
SET_4 = 365
SET_5 = 36
ANS_1 = SET_1 * (SET_2 / SET_3 / SET_4) * SET_5
Me![txt答え] = Int(ANS_1)
Me![txt答え1] = ANS_1
Me![txt答え2] = SET_1 * (SET_2 / SET_3 / SET_4) * SET_5
Me![txt答え3] = Int(SET_1 * (SET_2 / SET_3 / SET_4) * SET_5) - _
(SET_1 * (SET_2 / SET_3 / SET_4) * SET_5)
Me![txt答え4] = ANS_1 - (SET_1 * (SET_2 / SET_3 / SET_4) * SET_5)
各値の結果
Me![txt答え] :14400
Me![txt答え1]:14400
Me![txt答え2]:14400
Me![txt答え3]:0
Me![txt答え4]:0
----------------------------------------------------------------------
ではでは・・・
No.4
- 回答日時:
他の型の回答のように、小数を扱うと誤差が生じることがあります。
また、#3の方のようにすべて、通貨型にすることで誤差はなくなります。
そこで通貨型を使うのですが、具体的な数値であれば@で通貨型、というような指定が出来ます。
Me![txt答え]=Int(500000@ * (29.2@ / 100@ / 365@) * 36@)
これで誤差が出なくなります。ただ、通貨型は小数点以下は4桁しか扱えません。
ちなみに、Roundは、ExcelのROUND(四捨五入する関数)とは少し違う関数です。
No.2
- 回答日時:
内側の括弧の中を計算すると0.0008になりますよね。
これを二進数で表すと無限に続く少数となります。ですから、有限の小数で表せば必ず
切り捨てられる部分が出てきます。これが最後まで計算しても尾を引いていて、きっちり
した数にならなかったのだと思います。
Me![txt答え]=Int(500000*36/(365*100*10/292))
としたらどうでしょう。
ご回答有難うございます。
大変参考になりますが有限の小数の意味がいまいちわかりません。
Me![txt答え]=Int(500000*36/(365*100*10/292))
説明のためこの値にしたのですが、この値は365と100は変化しませんが500000、36、29.2は変化するのですが、この式にするとどのような値でも有限の小数となるのでしょうか?
No.1
- 回答日時:
INT関数は切り捨てです。
また、電卓で計算しても、計算順序によっては端数が出ます。
ちなみに500000/365を先に計算すると、1439.999999になりました。
また、計算機内では十進で計算するのではなく二進で計算するので、変換誤差が生じますので、INTは通常使用しません。エクセルではROUNDを使用するのですが、アクセスでもあるかどうかは、自信有りません。
早速ご回答いただき有難うございます。
計算順序によって端数が出るとは気がつきませんでした。
調べてみますとROUNDがありました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Excel(エクセル) エクセル VBAでセル内容を別の列の最下行に転記したい 2 2022/11/29 08:47
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- Excel(エクセル) エクセルのSUM関数について 4 2023/04/18 10:37
- 会計ソフト・業務用ソフト エクセルについて 1 2022/06/15 17:39
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- C言語・C++・C# プログラミング実行後に表示される値を答えよ #include <stdio.h> void main 4 2022/05/28 10:20
- Visual Basic(VBA) visual basic初心者です。 visual studioで電卓を作成しています。 実行時にテ 1 2023/02/08 00:18
- C言語・C++・C# 3×3のラテン方陣をつくるプログラムを作成したのですが、(↓) #include <stdio.h> 5 2023/07/10 01:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルのdatedif関数を使って...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
エクセル ドロップダウンリスト...
-
【関数】同じ関数なのに、エラ...
-
Office2021のエクセルで米国株...
-
【マクロ】列を折りたたみ非表...
-
9月17日でサービス終了らし...
-
【マクロ】アクティブセルの時...
-
ページが変なふうに切れる
-
【条件付き書式】シートの中で...
-
【マクロ】3行に上から下に並...
-
【マクロ】オートフィルターの...
-
【マクロ】EXCELで読込したCSV...
-
【画像あり】オートフィルター...
-
他のシートの検索
-
エクセルの循環参照、?
-
Excelファイルを開くと私だけVA...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報