How To Convert Infinity, -Infinity, NaN to Zero Value
Sometimes in the numeric formatted cells, as a result of various calculations, it is possible to have returned as a result the Anaplan special numbers: Infinity, -Infinity, or NaN (Not a Number).
If the numeric line item with this issue is also an input for other formulas, the final result could be altered. To solve this issue a solution is to convert these Anaplan special numbers in zero values.
Convert Infinity and -Infinity:
First thing is to have calculated the "Infinity" value in a system module without any lists.
This can be achieved in different ways by applying one of the formulas in a numeric formatted line-item: DIVIDE(1,0) or VALUE("Infinity").
Then it can be applied, in sequence, to the following Anaplan functions:
- Convert numeric line-item in positive number (function: ABS).
- Compare the result in Step 1 if it is NOT equal with the Infinity value calculated in the system module
- If TRUE then consider the numeric value, ELSE consider 0
Example: IF ABS(Value num) <> 'SY00 Params'.'Val. Infinity' THEN Value num ELSE 0
Note: ABS function is useful to solve in one comparison both Infinity (positive) and -Infinity (negative)
Convert NaN: Apply in sequence the following Anaplan functions/statements:
- Convert numeric line-item in positive number (function: ABS)
- Compare result Step 1 if it is greater or equal with zero. NaN value will return false.
- Consider the initial value of the line-item if Step 1 is greater or equal with zero else consider zero (on ELSE the NaN will be converted to zero).
Example: IF ABS(Value num) >= 0 THEN Value num ELSE 0
Notes:
- ABS function is useful to solve in one comparison both positive and negative numbers
- NaN=NaN, NaN>=0, NaN<=0 comparisons will always return FALSE. This is why it is needed to check with zero the numeric values.
Comments
-
Thanks for sharing. This is a great hack / help 🙂
AB
0 -
Thanks for this. I have seen this problem in one particular module in one particular model. I will see about implementing this.
0 -
Hi @alexpavel,
I like your solution if you want to exclude NaNs OR infinities. However, if you want to zero both NaNs AND infinities, I prefer less complicated (just one simple IF, no SYS modules) solution:
IF Value * 0 = 0 THEN Value ELSE 0Here I utilize properties of multiplication by 0. "Normal" numbers give 0, but NaN and infinities times 0 are NaN.
0 -
@M.Kierepka Thanks for your tip!.
I like your solution too..Indeed multiplying Infinity, -Infinity with zero will return NaN...and then comparing with zero arrive at the same result 🙂
0 -
Nice hack. Will use this in future.
0 -
One callout. If you want to reference "Infinity" in the formula just remember to have a clause for "-Infinity" as well. that way both will convert to 0 or whatever you need.
0 -
@M.Kierepka - great hack!
I had about a million NaN and Infinity formulas running through a number of modules due to a recovery formula trying to calculate without throughput (a few years in the future) - I just had to apply your trick formula to one line item in one module and it corrected the calculations throughout the model. Thanks for the tip!
0