/** * Rounding with decimal places (using default rounding method ROUND_HALF_EVEN) * * @param metaA * Metadata of value to round * @param dataA * Value to round * @param metaB * Metadata of decimal places * @param dataB * decimal places * @return The rounded value * @throws KettleValueException */ public static Object round( ValueMetaInterface metaA, Object dataA, ValueMetaInterface metaB, Object dataB ) throws KettleValueException { final Object r = round( metaA, dataA, metaB, dataB, ROUND_2_MODE ); return r; }
/** * Rounding with decimal places with a given rounding method * * @param metaA * Metadata of value to round * @param dataA * Value to round * @param metaB * Metadata of decimal places * @param dataB * decimal places * @param metaC * Metadata of rounding mode * @param dataC * rounding mode, e.g. java.math.BigDecimal.ROUND_HALF_EVEN * @return The rounded value * @throws KettleValueException */ public static Object round( ValueMetaInterface metaA, Object dataA, ValueMetaInterface metaB, Object dataB, ValueMetaInterface metaC, Object dataC ) throws KettleValueException { if ( dataA == null || dataB == null || dataC == null ) { return null; } Long valueC = metaC.getInteger( dataC ); if ( valueC == null || valueC < Const.ROUND_HALF_CEILING || valueC > BigDecimal.ROUND_HALF_EVEN ) { throw new KettleValueException( "The 'round_custom' arg C has incorrect value: " + valueC ); } int roundingMode = valueC.intValue(); return round( metaA, dataA, metaB, dataB, roundingMode ); }
return ValueDataUtil.combination2( valueMetaA, dataA, valueMetaB, dataB ); } else if ( calculatorMetaFunction == CalculatorMetaFunction.CALC_ROUND_1 ) { return ValueDataUtil.round( valueMetaA, dataA ); } else if ( calculatorMetaFunction == CalculatorMetaFunction.CALC_ROUND_2 ) { return ValueDataUtil.round( valueMetaA, dataA, valueMetaB, dataB ); } else if ( calculatorMetaFunction == CalculatorMetaFunction.CALC_NVL ) { return ValueDataUtil.nvl( valueMetaA, dataA, valueMetaB, dataB );
break; case CalculatorMetaFunction.CALC_ROUND_1: // ROUND( A ) calcData[index] = ValueDataUtil.round( metaA, dataA ); break; case CalculatorMetaFunction.CALC_ROUND_2: // ROUND( A , B ) calcData[index] = ValueDataUtil.round( metaA, dataA, metaB, dataB ); break; case CalculatorMetaFunction.CALC_ROUND_CUSTOM_1: // ROUND( A , B ) calcData[index] = ValueDataUtil.round( metaA, dataA, metaB.getNumber( dataB ).intValue() ); break; case CalculatorMetaFunction.CALC_ROUND_CUSTOM_2: // ROUND( A , B, C ) calcData[index] = ValueDataUtil.round( metaA, dataA, metaB, dataB, metaC.getNumber( dataC ).intValue() ); break; case CalculatorMetaFunction.CALC_ROUND_STD_1: // ROUND( A ) calcData[index] = ValueDataUtil.round( metaA, dataA, java.math.BigDecimal.ROUND_HALF_UP ); break; case CalculatorMetaFunction.CALC_ROUND_STD_2: // ROUND( A , B ) calcData[index] = ValueDataUtil.round( metaA, dataA, metaB, dataB, java.math.BigDecimal.ROUND_HALF_UP ); break; case CalculatorMetaFunction.CALC_CEIL: // CEIL( A )