掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TIBSQLで正確な数値が取得できない件について (ID:27510)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いつもお世話になっています。 現在下記のようなことで行き詰まってます。 もしかしたら、基本的な部分を見落としているのかもしれませんが、どうぞよろしくお願いします。 [環境] Delphi7 FireBird 1.5.3 下記のように、TClientDataSetへTIBSQLで取得した数値を書き込み、その後XMLで出力するという処理を行うと、 データベースに記憶されている値が”0.56”の時に正確な値が入ってくれません。他の”0.55”、”0.57”では正確な値がXMLへ出力されます。 〜〜(省略)〜〜 ClientDataSet.Edit; ClientDataSet.FieldByName('Suu').AsFloat := IBSQL.FieldByName('Num').AsDouble; ClientDataSet.Post; ClientDataSet.SaveToFile('C:\Data.xml', dfXMLUTF8); _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ どこが、おかしいのか調べるためにTIBSQLを使って、値を取得するところで下記のようにしてみるとデータベースからの取得する時点で正確な値が取得できていません。 var D: Double; D := 0.56; D := IBSQL.FieldByName('Num').AsDouble - D; ← これは、変数"D"には"0"が入る。 D := IBSQL.FieldByName('Num').AsDouble - 0.56; ← こちらは、変数"D"には誤差が入る。(1.2445654564E-14 のような) また、次のSQLを発行してみると結果は"0"が返ってきますので、データベースが保持している値は正確な値なような気がするのですが、、、 SELECT Num - 0.56 FROM DataTable; (”Num”は、問題の値が保持されているフィールド名) 最悪は、仕様上許される範囲で丸めを行おうと思っていますが、どうしても気持ちが悪いです。。 何故、このようになるのか教えて下さい。よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.