# floor

operator

 Library: Floating point number support (OMFLOAT) Import : omfloat.xmd Library: Binary coded decimal numbers (OMBCD) Import : ombcd.xmd Returns: the value truncated down to the specified precision

Declaration
```export overloaded external float function
floor    value float x
by value float base optional

floor    value bcd x
by value bcd base optional
```

Purpose

Use floor to round down:

• a floating point number
• a BCD number
• an integer (coerced into either a floating point or a BCD number)

If you include the keyword "by" and specify the precision, floor will round down to the multiple of the precision you have specified.

If you do not include the keyword "by" and do not specify the precision, floor will round down to the next integer whose value is less than the expression.

For values greater than zero, `floor` works like `truncate`. For values less than zero, floor rounds down to the next whole number less than or equal to the original value.

Import either ombcd.xmd or omfloat.xmd in your program after deciding whether you want BCD mathematics (excellent for financial calculations) or floating point mathematics (excellent for extremely large numbers).

### BCD Example:

Calculate the area of a circle:

```  import "ombcd.xmd" unprefixed
process
local bcd pi  initial {"3.14179"}
local bcd area

output "area of circle with radius " || "d" % radius || " is at least " || "d" % area || "%n"
```

You can specify the precision of the truncation/rounding. The following program uses a precision of 0.01 to truncate/round the value at the whole cents position:

```  import "ombcd.xmd" unprefixed
process
local bcd exchange-rate initial {1.4356}
local bcd us-price  initial {129.95}

set canadian-price to floor (us-price*exchange-rate) by bcd 0.01
output "US " || "<\$,NNZ.ZZ>" % us-price || " is at least " || "<\$,NNZ.ZZ>" % canadian-price || " CDN %n"
```

The precision specifier must be a power of 10.

### Floating Point Example:

Calculate the area of a circle:

```
import "omfloat.xmd" unprefixed
process