#### Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

# Number Handling

If I send the result of a calculation to a lookup subtable as a line number and the calculation doesn't produce a whole number, how does IPP handle it?

• From what I can tell, using lookup values with anything other than a positive whole number is quirky.

Example: This always returns "one"
Table: Test
{roll=1d3+0.5} yields [#{roll} Look]
Table: Look
Type:lookup
default:default
1:one
2:two
3:three

Example: This always returns "default"
Table: Test
{roll=1d3+0.5} yields [#{roll} Look]
Table: Look
Type:lookup
default:default
2:two
3:three

• Thank you. This is similar to my results. As I only need to pass the calculation result if it is a whole number I'll have to devise an interim routine to test it.

• You could use round, floor, or ceil either to turn the result into a whole integer or to test it.

`[#{round(roll)} Look]`

or

`[when]{floor(x)}={x}[do]It's a whole integer[else]It's not a whole integer[end]`

One catch: I just found out that the round function isn't always right. In this example, it rounds 1.5 and 3.5 correctly, but not 2.5.

``````1.5 rounded should be 2. It's {round(1.5)}. &
\n2.5 rounded should be 3. It's {round(2.5)}. &
\n3.5 rounded should be 4. It's {round(3.5)}
``````

That's either a quirk of the internal floating point representation or a bug in the round function.

• Thanks for your suggestions and examples. I did a combination of the two examples and so far it's working OK.

• IPP is written in Delphi, and I believe their rounding function by default uses what's called "Banker's Rounding", where it rounds to the nearest even number. That's probably whats going on there.