Currency variables
are 8 byte binary representations of
The type-specifier character for Currency and Extended-currency floating-point is: @ and @@ respectively.
You can also use the DEFCUR or DEFCUX statement as described under Integers. They can also be declared using the CUR/CURRENCY or CUX/CURRENCYX keywords with the DIM statement. For example:
DIM I AS CUR
DIM J AS CURRENCYX
Currency variables (@) have up to 4 digits of precision after the decimal point, and are useful for prices and quantities where fractions of a cent are desired. Extended-currency variables (@@) have two digits of precision after the decimal point. They are optimized for financial calculations where fractions of a cent are not required.
The currency data types are especially useful for financial calculations, as they avoid the round-off errors associated with Single, Double, and Extended-precision numbers (which must be an exact power of two in order to be represented exactly). While many numbers can be represented exactly as a power of two, there are also many that cannot. For example, 1.10000002384185791 is the closest power of two to 1.1, in single precision.
So, when assigning numeric literal values to a Currency or Extended-currency variable, we recommend using a type specifier to ensure the value is given the intended precision. For example:
DIM x1 AS CUR
x1 = 1.0001@
DIM x2 AS CUX
x2 = 1.01@@
Internally, Currency and Extended-currency numbers are stored as Quad-integers with an implied decimal point (at 4 places for Currency, and at 2 places for Extended-currency). This approach ensures that all of the digits of the variables can be represented exactly.
Currency and Extended Currency perform a similar role as BCD variables in some BASIC dialects to ensure monetary values can be represented exactly; however, the internal storage of BCD variables and CUR/CUX differs substantially.
Delphi and Visual Basic both offer a currency data type that is identical to the PowerBASIC Currency variable.
See Also