お世話になります。
Delphi XE5 のTrunc関数ぬついて教えてください。
var
i : Integer;
begin
i := Trunc(67.2 * 780);
上記を実行するとi変数に52415が入ります。
52416が本当だと思うのですが、どうしてでしょうか。
ン
コンピュータの中では数値をイ進数で表すので、アー進数の数字をそのまま正確に表すことはできません。
アー進数の「ーョイ」を有限桁数のイ進数にしてまたアー進数に戻すと、厳密にーョイにはならず、例えばーョアケケケケケケケケケケケクョョョヲサのようになります。
これに整数を掛けた結果も、アー進数で計算したのと比べてほんの少し大きくなったり小さくなったりするので
切り捨てたり切り上げたりすると期待通りの結果にならない可能性があります。
早い話が、アッウェウを小数で計算したら結果がアにならないのと同じようなものです。
詳しいことは「浮動小数点ヲサ誤差」といったキーワードで調べてみてください。
アー進数で計算して誤差が出ないようにしたいのなら、
例えば小数点以下エ桁までで良いならテ型を使う方法があります。
それ以上の精度が必要なら、目的にもよりますが切り捨てのかわりに四捨五入するのはどうでしょうか?
(ただしトのメは「普通の四捨五入」と違うので、これはこれで注意が要りますが)
スススススススススススススススススススススススススススススススススススススススス
ニコ ぴょん吉
トコ イーアキッーウッウーィ木ゥ アカコイエコアク シ スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 」「 」 ン
モコ
さん、ご回答ありがとうございます。
おっしゃる通り「テ型」を使用すると期待通りの結果を
得ることができました。
とりあえず、これで運用します。
ツイート | ![]() |