Here you can find the source of floor(BigDecimal dividend, int divisor)
public static BigDecimal floor(BigDecimal dividend, int divisor)
//package com.java2s; /*//from w ww .j a va 2 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 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; } }