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.
ADS