## Thursday, 17 July 2014

### Rounding Inventor Parameters

The other day I was looking to round the value of a parameter. I was actually calculating distance from the floor to the top of a flange on a conical tank and the value came with billion digit precision. It's nice to have it but it doesn't look professional when dimensionsing or measuring from it.
Couple of words on rounding parameters and using functions:
Functions
The following are the supported functions as presented in the Autodesk Inventor help page.

 Syntax Returns Unit Type Expected Unit Type cos(expr) unitless angle sin(expr) unitless angle tan(expr) unitless angle acos(expr) angle unitless asin(expr) angle unitless atan(expr) angle unitless cosh(expr) unitless angle tanh(expr) unitless angle acosh(expr) angle unitless asinh(expr) angle unitless sqrt(expr) unit^1/2 any sign(expr) unitless any (Return 0 if negative, 1 if positive.) exp(expr) unitless any (Return exponential power of expression: for example, return 2 for 100, 3 for 1000, and so on.) floor(expr) unitless unitless (Next lowest whole number.) ceil(expr) unitless unitless (Next highest whole number.) round(expr) unitless unitless (Closest whole number.) abs(expr) any any max(expr1;expr2) any any min(expr1;expr2) any any ln(expr) unitless unitless log(expr) unitless unitless pow(expr1;expr2) unit^expr2 any and unitless, respectively random(expr) unitless unitless isolate(expr;unit;unit) any any

The last one isolate is used to change from one unit to another and this if usefull if you need to calculate the number of holes (of type unitles ul) by dividing a linear dimension (of unit mm) by another linear dimension (of unit mm). The normal result will be of type mm and you need to convert it to unitless ul like this:
isolate((total_length / hole_dist); mm; ul)
Now I was looking to round the result of an equation to an integer but the result was surprising.

Round 1497.21 = 1500 ?!?
Ceil 1497.21 = 1500 ?!?
Floor 1497.21 = 1490 ?!?

Round 1497.00 = 1500 ?!?
Ceil 1497.00 = 1500 ?!?
Floor 1497.00 = 1490 ?!?

Round 1497.51 = 1500 ?!?
Ceil 1497.51 = 1500 ?!?
Floor 1497.51 = 1490 ?!?

So in order to get a proper rounding you need to multiply it first by a multiple of 10, then do the operation and divide again by the same 10 multiple.

Round (1497.21 * 10) /10 = 1497
Ceil (1497.21 * 10) / 10 = 1498
Floor (1497.21 * 10) / 10 = 1497

Round (1497.00 * 10) /10 = 1497
Ceil (1497.00 * 10) / 10 = 1498
Floor (1497.00 * 10) / 10 = 1497

Round (1497.51 * 10) /10 = 1498
Ceil (1497.51 * 10) / 10 = 1498
Floor (1497.51 * 10) / 10 = 1497

I am missing something and it's got to do with the unit conversion for sure, but for now this will do.

Hope it helps you as well.

EDIT 16-02-2016:
There is an update for this so come check it out here.