みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっています。
既出かもしれないと、検索しましたが、出てこなかったんで質問です
計算フィールドにて計算すると、整数になるはずの計算が、整数になりません
例えば 48000 * 4 / 12
とそれぞれのフィールドの値が上記のようになるとき、普通に計算するとこの答えは16000のはずです
これが、FileMaker(Ver18)だと15999.99999987 (9がいくつ並ぶがとか最後87だったか怪しいですがたしかこんな数字)
となります。これはPCが2進数で計算するからとかなんとかどこかで読んだことある気がしますが
で、この計算式は、フィールドの値により小数点以下が発生する可能性があるので、INT関数で整数化しているのですが、しかたないので、0.00001程度を加えてからINTで整数にしています
こうした対応しかないのでしょうか?後々の担当者がこれ見たときに「なんじゃこりゃ?」ということにもなろうかと
念のため計算式にはコメントを入れておいたのでいいといえばいいのですが
ちなみに、FileMakerのバージョンが古い時は、この計算、ちゃんと16000になっていました。バージョンアップをしたら計算が合わないので、なんで?となり探してみたらこうした状況でした。
こうしたことはしょうが無いんでしょうか。
Offline
FileMaker Pro 18 Advanced で試しましたが再現しません。
(計算結果は16000になります)
フィールドタイプや計算結果が数字になっていないとかありませんか?
Offline
計算誤差が発生するのは割り算部分だから、割り算は最後に計算するような構文式にすれば良いでしょう。
・48000 * 4 / 12 → 無指定(機械任せ) 16000(Win?) or 15999.999999999999984(Mac?)
・48000 * (4 / 12) → 先算指定 15999.999999999999984
・(48000 * 4) / 12 → 後算指定 16000
Offline
環境に依存するんですかね......
Windows 10 :FileMaker Pro 18 Advanced 18.0.3
macOS 10.14.6 :FileMaker Pro 18 Advanced 18.0.3
データビューアでもサンプルのように数字フィールドと計算フィールドにしても同じです。
いずれも16000です。
48000 * 4 /12 のままでも除算部分が最後だと思いますがコンピュータは解釈が違うのかな。
Offline
こちらでも例示の数値では再現しませんでした。参照しているフィールド自体が計算式、とか、Excelからインポートした、とかですかねえ?
フィールドの値により小数点以下が発生する可能性があるので、INT関数で整数化しているのですが、しかたないので、0.00001程度を加えてからINTで整数にしています
この意味がわかりません。可能性があるなら整数にしてはだめなのでは?
必要な小数点以下の桁数を指定して、Round()を使ったらいいのでは?
ご回答ありがとうございます!
Hiroさんの言われる通りでした
割り算を先にやっていました(^_^;)
これ、減価償却の算出だったのですが、当年度に取得したものは取得月によって○ヶ月/12をかけるので、イメージ的にカッコでくくってしまっていたようです。
このカッコを外したら、きちんと16000となりました。(Win機です)
みなさまご回答ありがとうございます!
himaganee様
>フィールドの値により小数点以下が発生する可能性があるので、INT関数で整数化しているのですが、しかたないので、0.00001程度を加えてからINTで整数にしています
ややこしくてすいません。例に出した計算が元々整数となるので、INT不要では?とみなさんが思われるかな~と
「INTが必要な計算になってます」という意味でした。
Offline
Pages: 1
[ Generated in 0.008 seconds, 10 queries executed - Memory usage: 514.19 KiB (Peak: 519.09 KiB) ]