0

実行時に40510.416667の値が割り当てられるTDateTime変数があります。Frac関数を使用してTTime型変数に時間を抽出すると、0.41666666666に設定されます。なぜ値の精度が変更されたのか、元の値からの精度を維持するための回避策があります。0.416667に設定します。

4

4 に答える 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 に答える