FRAC関数は精度を失います
-
20-09-2019 - |
質問
40510.416667の実行時に値が割り当てられるTDateTime変数があります。 FRAC関数を使用してTIMEタイプ変数に時間を抽出すると、0.41666666666に設定します。なぜそれが値の精度を変え、元の値、つまり元の値から精度を保持するための動作があるのですか。 0.416667に設定します。
解決
精度が失われた理由の1つは、TDateTimeが2倍であり、FRACのパラメーターと戻り値が拡張されていることです。
フローティングポイントをあるタイプから別のタイプに変換するとき、 いくつか 精度を失う可能性があります。 (それらに算術をするときも同じことが言えます)。
フロート値を正しく比較するには、ユニット数学の比較値関数を使用する必要があります。
他のヒント
tdateTimeは浮動小数点数です。いくつかの数値は、浮動小数点数として正確に表すことはできません。 0.416667 / 0.41666666666は別のもののようです。
ディスプレイのために5桁または6桁まで丸くすることができます。これにより、正確さは約1秒になります。
すべてのコンピューター科学者が浮動小数点数について知っておくべきこと そうであるように、そうするべきです 浮動点の精度 - それはあなたにジェフの答えに合ういくつかの詳細な情報を提供します。
これについてのあなたの助けに感謝します。精度の変化のために発生していた私の問題を回避するために、時間を比較するために> =または<=演算子の代わりに比較関数を使用しました。
所属していません StackOverflow