Here you can find the source of round(BigDecimal dividend, int divisor)
public static BigDecimal round(BigDecimal dividend, int divisor)
//package com.java2s; /*//w w w. ja v a2 s . c o m * Este programa es software libre; usted puede redistribuirlo y/o modificarlo bajo los terminos * de la licencia "GNU General Public License" publicada por la Fundacion "Free Software Foundation". * Este programa se distribuye con la esperanza de que pueda ser util, pero SIN NINGUNA GARANTIA; * vea la licencia "GNU General Public License" para obtener mas informacion. */ import java.math.BigDecimal; import java.math.BigInteger; public class Main { public static Byte round(Byte dividend, int divisor) { if (dividend == null || divisor == 0) { return dividend; } int remainder = dividend % divisor; return remainder == 0 ? dividend : remainder < divisor / 2 ? floor(dividend, divisor) : ceiling(dividend, divisor); } public static Short round(Short dividend, int divisor) { if (dividend == null || divisor == 0) { return dividend; } int remainder = dividend % divisor; return remainder == 0 ? dividend : remainder < divisor / 2 ? floor(dividend, divisor) : ceiling(dividend, divisor); } public static Integer round(Integer dividend, int divisor) { if (dividend == null || divisor == 0) { return dividend; } int remainder = dividend % divisor; return remainder == 0 ? dividend : remainder < divisor / 2 ? floor(dividend, divisor) : ceiling(dividend, divisor); } public static Long round(Long dividend, int divisor) { if (dividend == null || divisor == 0) { return dividend; } long remainder = dividend % divisor; return remainder == 0 ? dividend : (int) remainder < divisor / 2 ? floor(dividend, divisor) : ceiling(dividend, divisor); } public static Float round(Float dividend, int divisor) { if (dividend == null || divisor == 0) { return dividend; } double remainder = dividend % divisor; return remainder == 0 ? dividend : (int) remainder < divisor / 2 ? floor(dividend, divisor) : ceiling(dividend, divisor); } public static Double round(Double dividend, int divisor) { if (dividend == null || divisor == 0) { return dividend; } double remainder = dividend % divisor; return remainder == 0 ? dividend : (int) remainder < divisor / 2 ? floor(dividend, divisor) : ceiling(dividend, divisor); } public static BigInteger round(BigInteger dividend, int divisor) { if (dividend == null || divisor == 0) { return dividend; } BigInteger remainder = dividend.remainder(BigInteger.valueOf(divisor)); return remainder.equals(BigInteger.ZERO) ? dividend : remainder.intValue() < divisor / 2 ? floor(dividend, divisor) : ceiling(dividend, divisor); } public static BigDecimal round(BigDecimal dividend, int divisor) { if (dividend == null || divisor == 0) { return dividend; } BigDecimal remainder = dividend.remainder(BigDecimal.valueOf(divisor)); return remainder.equals(BigDecimal.ZERO) ? dividend : remainder.intValue() < divisor / 2 ? floor(dividend, divisor) : ceiling(dividend, divisor); } public static Byte floor(Byte dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } int factor = dividend / divisor; int product = factor * divisor; return product < Byte.MIN_VALUE || product > Byte.MAX_VALUE ? dividend : (byte) product; } public static Short floor(Short dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } int factor = dividend / divisor; int product = factor * divisor; return product < Short.MIN_VALUE || product > Short.MAX_VALUE ? dividend : (short) product; } public static Integer floor(Integer dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } long factor = dividend / divisor; long product = factor * divisor; return product < Integer.MIN_VALUE || product > Integer.MAX_VALUE ? dividend : (int) product; } public static Long floor(Long dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } long factor = dividend / divisor; long limit = Long.signum(factor) == Integer.signum(divisor) ? Long.MAX_VALUE : Long.MIN_VALUE; boolean overflow = factor > 0 && factor > limit / divisor || factor < 0 && factor < limit / divisor; long product = overflow ? dividend : factor * divisor; return product; } public static Float floor(Float dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } double factor = Math.floor(dividend / divisor); double product = factor * divisor; return product < Float.MIN_VALUE || product > Float.MAX_VALUE ? dividend : (float) product; } public static Double floor(Double dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } double factor = Math.floor(dividend / divisor); double limit = Math.signum(factor) == Integer.signum(divisor) ? Double.MAX_VALUE : Double.MIN_VALUE; boolean overflow = factor > 0 && factor > limit / divisor || factor < 0 && factor < limit / divisor; double product = overflow ? dividend : factor * divisor; return product; } public static BigInteger floor(BigInteger dividend, int divisor) { BigInteger denominator = BigInteger.valueOf(divisor); if (dividend == null || divisor == 0 || dividend.remainder(denominator).equals(BigInteger.ZERO)) { return dividend; } BigInteger factor = dividend.divide(denominator); BigInteger product = factor.multiply(denominator); return product; } public static BigDecimal floor(BigDecimal dividend, int divisor) { BigDecimal denominator = BigDecimal.valueOf(divisor); if (dividend == null || divisor == 0 || dividend.remainder(denominator).equals(BigDecimal.ZERO)) { return dividend; } BigDecimal factor = dividend.divideToIntegralValue(denominator); BigDecimal product = factor.multiply(denominator); return product; } public static Byte ceiling(Byte dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } int factor = dividend / divisor + 1; int product = factor * divisor; return product < Byte.MIN_VALUE || product > Byte.MAX_VALUE ? dividend : (byte) product; } public static Short ceiling(Short dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } int factor = dividend / divisor + 1; int product = factor * divisor; return product < Short.MIN_VALUE || product > Short.MAX_VALUE ? dividend : (short) product; } public static Integer ceiling(Integer dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } long factor = dividend / divisor + 1; long product = factor * divisor; return product < Integer.MIN_VALUE || product > Integer.MAX_VALUE ? dividend : (int) product; } public static Long ceiling(Long dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } long factor = dividend / divisor + 1; long limit = Long.signum(factor) == Integer.signum(divisor) ? Long.MAX_VALUE : Long.MIN_VALUE; boolean overflow = factor > 0 && factor > limit / divisor || factor < 0 && factor < limit / divisor; long product = overflow ? dividend : factor * divisor; return product; } public static Float ceiling(Float dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } double factor = Math.floor(dividend / divisor) + 1; double product = factor * divisor; return product < Float.MIN_VALUE || product > Float.MAX_VALUE ? dividend : (float) product; } public static Double ceiling(Double dividend, int divisor) { if (dividend == null || divisor == 0 || dividend % divisor == 0) { return dividend; } double factor = Math.floor(dividend / divisor) + 1; double limit = Math.signum(factor) == Integer.signum(divisor) ? Double.MAX_VALUE : Double.MIN_VALUE; boolean overflow = factor > 0 && factor > limit / divisor || factor < 0 && factor < limit / divisor; double product = overflow ? dividend : factor * divisor; return product; } public static BigInteger ceiling(BigInteger dividend, int divisor) { BigInteger denominator = BigInteger.valueOf(divisor); if (dividend == null || divisor == 0 || dividend.remainder(denominator).equals(BigInteger.ZERO)) { return dividend; } BigInteger factor = dividend.divide(denominator).add(BigInteger.ONE); BigInteger product = factor.multiply(denominator); return product; } public static BigDecimal ceiling(BigDecimal dividend, int divisor) { BigDecimal denominator = BigDecimal.valueOf(divisor); if (dividend == null || divisor == 0 || dividend.remainder(denominator).equals(BigDecimal.ZERO)) { return dividend; } BigDecimal factor = dividend.divideToIntegralValue(denominator).add(BigDecimal.ONE); BigDecimal product = factor.multiply(denominator); return product; } }