1

いくつかのコードをテストして、それが処理され、正しく入力されることを確認したいと思いNANます。INF-INF

、、を返す関数が存在することは 知っていますが、:としてNANINF-INFDouble

unit IEEE754;
...
function NAN: Double;
function PositiveInfinity:  Double;
function NegativeInfinity:  Double;

私の場合を除いて、aCurrencyがこれらの3つのエッジケース値の1つであるかどうかをテストする必要があります。Double残念ながら、これらのいずれも:に変換することはできません。

Test(NAN);

procedure Test(const Value: Currency);
  ...

をに変換すると、EInvalidOp 無効な浮動小数点演算の例外が発生します。Double NANCurrency

にを割り当てることは可能ですか?NANCurrency

おそらく、 aをに割り当てることは可能ではなく、代わりに不可能です-そして私はこのエッジケースを無視することができます。NANCurrency

このエッジケースを無視できますか?

「通貨の値をNAN、INF、または-INFに設定する」ことはできますか?


{   David Heffernan says it's impossible for a currency to contain INF,-INF or NAN.
    So there's no need to test for it.
    http://stackoverflow.com/questions/7096966/set-a-currency-value-to-nan-inf-or-inf

    //Handle NaN, where exponent is -32767
    test(NAN, 'NAN');

    //Handle +inf, where exponent is 32767 and Negative is true
    test(PositiveInfinity, 'INF');

    //Handle -inf, where expondent is 32767 and Negative is true
    test(NegativeInfinity, '-INF');
}
4

1 に答える 1

11

Currency は IEEE754 float 型ではなく、NAN または INF 値を持ちません。

ドキュメントでは、Currency は 10000 の暗黙的なスケールを持つ 64 ビット整数として実装され、可能な値の範囲は -922337203685477.5808 から 922337203685477.5807 であると説明されています。これは 64 ビット整数の全範囲をカバーするため、NAN や INF などのセンチネル値に使用できるビット パターンはありません。

于 2011-08-17T17:32:36.540 に答える