実行時に40510.416667の値が割り当てられるTDateTime変数があります。Frac関数を使用してTTime型変数に時間を抽出すると、0.41666666666に設定されます。なぜ値の精度が変更されたのか、元の値からの精度を維持するための回避策があります。0.416667に設定します。
1266 次
4 に答える
2
すべてのコンピューター科学者が浮動小数点数について知っておくべきことは、SO独自の浮動小数点の精度と同様に役立つはずです。これにより、ジェフの答えに役立つ詳細情報が得られます。
于 2010-03-16T13:15:58.860 に答える
2
TDateTimeは浮動小数点数です。一部の数値は、浮動小数点数として正確に表すことができません。0.416667/0.41666666666は別のもののようです。
表示用に5桁または6桁に丸めることができます。これにより、約1秒の精度が得られます。
于 2010-03-16T12:53:23.060 に答える
1
精度が低下する理由の1つは、TDateTimeがdoubleであり、Fracのパラメーターと戻り値がExtended型であるためです。
フローティングポイントをあるタイプから別のタイプに変換する場合、ある程度の精度が失われる可能性があります。(それらに対して算術演算を行う場合も同じです)。
float値を正しく比較するには、ユニットMathのCompareValue関数を使用する必要があります。
于 2010-03-16T13:47:00.260 に答える
1
これについてのすべてのあなたの助けに感謝します、大いに感謝します。精度の変更によって発生した問題を回避するために、時間を比較するために>=または<=演算子の代わりにCompareTime関数を使用しました。
于 2010-03-16T15:55:35.137 に答える