将货币值设置为NAN,INF或-INF?

时间:2011-08-17 17:30:23

标签: delphi nan delphi-5 infinity

我想测试一些代码,以确保它正确处理NANINF-INF输入。

我知道there exists functions that return NANINF-INF,但是Double

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

除了在我的情况下,我需要测试Currency是否是这三个边缘情况值之一。不幸的是,您无法将其中任何一项转换为Double

Test(NAN);

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

EInvalidOp Double转换为NAN时,存在Currency 无效的浮点运算异常。

可能NAN分配给Currency吗?

也许,而不是可能NAN分配给Currency,而不是可能 - 而我可以忽略这种边缘情况。

我可以忽略这个边缘情况吗?

是否可以 “将货币值设置为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');
}

1 个答案:

答案 0 :(得分:11)

Currency不是IEEE754浮点类型,并且没有NAN或INF值。

documentation解释说,Currency实现为64位整数,隐式标度为10000,可能值范围为-922337203685477.5808至922337203685477.5807。由于这涵盖了64位整数的全部范围,因此没有可用于诸如NAN或INF之类的标记值的位模式。