? 1.3456, PreciseRound( 1.3456, .2, 1 ) ? 1.6345, PreciseRound( 1.6345, .5, 1 ) ? 1.3456, PreciseRound( 1.3456, .005, 3 ) */ function to round precision */ Ex: PreciseRound( 123.3321, .4, 1 ) function PreciseRound( lnValue, lnPrecVal, lnDec ) local lnNewVal, lnRem */ Put into whole number and do primary rounding */ before determining precision up/down... lnNewVal = round( lnValue, lnDec +1 ) */ Now, based on precision what remainder would */ be left in case not exactly divisible lnRem = mod( lnNewVal, lnPrecVal ) */ if over the halfway precision mark, round up if lnRem / lnPrecVal >= .5 lnNewVal = lnNewVal + lnPrecVal - lnRem else lnNewVal = lnNewVal - lnRem endif return( round( lnNewVal, lnDec ) )