round, i64round
<< right | FB 2.0 Language Reference | rpad >>
round, i64round
Library: fbudf
Added in: 1.0 (Win), 1.5 (Linux)
Changed in: 1.5, 2.0.6
Description
These functions return the whole number that is nearest to their (scaled numeric/decimal) argument. They do not work with floats or doubles.
Result type: INTEGER / NUMERIC(18,4)
Syntax
round (number) i64round (bignumber)
Caution: Halves are always rounded upward, i.e. away from zero for positive numbers and toward zero for negative numbers. For instance, 3.5 is rounded to 4, but -3.5 is rounded to -3.
Bug alert: In versions 2.0 through 2.0.5, these functions are broken for negative numbers:
- Anything between 0 and -0.6 (that's right: -0.6, not -0.5) is rounded to 0.
- Anything between -0.6 and -1 is rounded to +1 (plus 1).
- Anything between -1 and -1.6 is rounded to -1.
- Anything between -1.6 and -2 is rounded to -2.
- Etcetera.
Fixed in 2.0.6 (backport from 2.5).
Declarations
In Firebird 1.0.x, the entry point for both functions is round:
DECLARE EXTERNAL FUNCTION Round INT BY DESCRIPTOR, INT BY DESCRIPTOR RETURNS PARAMETER 2 ENTRY_POINT 'round' MODULE_NAME 'fbudf' DECLARE EXTERNAL FUNCTION i64Round NUMERIC(18,4) BY DESCRIPTOR, NUMERIC(18,4) BY DESCRIPTOR RETURNS PARAMETER 2 ENTRY_POINT 'round' MODULE_NAME 'fbudf'
In Firebird 1.5, the entry point has been renamed to fbround:
DECLARE EXTERNAL FUNCTION Round INT BY DESCRIPTOR, INT BY DESCRIPTOR RETURNS PARAMETER 2 ENTRY_POINT 'fbround' MODULE_NAME 'fbudf' DECLARE EXTERNAL FUNCTION i64Round NUMERIC(18,4) BY DESCRIPTOR, NUMERIC(18,4) BY DESCRIPTOR RETURNS PARAMETER 2 ENTRY_POINT 'fbround' MODULE_NAME 'fbudf'
If you move an existing database from Firebird 1.0.x to 1.5 or higher, drop any existing *round and *truncate declarations and declare them anew, using the updated entry point names. From Firebird 2.0 onward you can also perform this update with ALTER EXTERNAL FUNCTION.
back to top of page
<< right | FB 2.0 Language Reference | rpad >>







