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

Ian*_*oyd 1 delphi nan delphi-5 infinity

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

我知道存在返回的功能 NAN,INF-INF,但是作为Double:

unit IEEE754;
...
function NAN: Double;
function PositiveInfinity:  Double;
function NegativeInfinity:  Double;
Run Code Online (Sandbox Code Playgroud)

除了在我的情况下,我需要测试a何时Currency是这三个边缘情况值之一.不幸的是,你无法将这些中的任何一个转换为Double:

Test(NAN);

procedure Test(const Value: Currency);
  ...
Run Code Online (Sandbox Code Playgroud)

将a转换为a 时,存在EInvalidOp 无效的浮点运算异常.Double NANCurrency

是否可以指定NAN一个Currency

也许,而不是它是可以指定一个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');
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 11

货币不是IEEE754浮点类型,并且没有NAN或INF值.

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

  • Currency是Int64,隐式缩放10000.它是十进制而不是二进制,以避免基数10算术中的舍入错误.绝对没有NAN或INF.如果它变成梨形,你可以怪我.它是梨形的. (3认同)
  • Ian,`Currency`是一个缩放的64位整数,而不是浮点类型.用它来表示非数字是不可能的,因为所有位模式都代表实际值.它与Int64具有相同的范围,除了所有值除以10000. (2认同)