Class MathHelper

java.lang.Object
com.helger.commons.math.MathHelper

@Immutable public final class MathHelper extends Object
Contains several math help routines.
Author:
Philip Helger
  • Method Details

    • getRoundedUp

      public static int getRoundedUp(int nToRound, @Nonnegative int nMultiple)
      Round up to the nearest multiple of the value to round.
      Parameters:
      nToRound - Value to round. May be positive or negative.
      nMultiple - Multiple to use. Must be ≥ 0.
      Returns:
      The rounded value.
    • getDividedDouble

      public static double getDividedDouble(int nDividend, int nDivisor)
      Divides the passed int dividend through the passed divisor (nDividend / nDivisor)
      Parameters:
      nDividend - the dividend
      nDivisor - the divisor
      Returns:
      a double representing the exact quotient. Returns Double.NaN if the divisor is 0.
    • getDividedDouble

      public static double getDividedDouble(long nDividend, long nDivisor)
      Divides the passed int dividend through the passed divisor (nDividend / nDivisor)
      Parameters:
      nDividend - the dividend
      nDivisor - the divisor
      Returns:
      a double representing the exact quotient. Returns Double.NaN if the divisor is 0.
    • getDividedBigDecimal

      @Nonnull public static BigDecimal getDividedBigDecimal(long nDividend, long nDivisor)
      Get the division result using BigDecimal.
      Parameters:
      nDividend - the dividend
      nDivisor - the divisor
      Returns:
      the result of the division
      Throws:
      ArithmeticException - if the divisor is 0.
    • getDividedBigDecimal

      @Nonnull public static BigDecimal getDividedBigDecimal(long nDividend, long nDivisor, @Nonnegative int nScale, @Nonnull RoundingMode eRoundingMode)
      Get the division result using BigDecimal.
      Parameters:
      nDividend - the dividend
      nDivisor - the divisor
      nScale - Number of fraction digits. Must be ≥ 0.
      eRoundingMode - Round mode to be used. May not be null.
      Returns:
      the result of the division
      Throws:
      ArithmeticException - if the divisor is 0.
      Since:
      v11.0.2
    • getIntDividedCeil

      public static int getIntDividedCeil(int nDividend, int nDivisor)
    • getIntDividedFloor

      public static int getIntDividedFloor(int nDividend, int nDivisor)
    • getIntDivided

      public static int getIntDivided(int nDividend, int nDivisor, @Nonnull RoundingMode eRoundingMode)
    • getLongDividedCeil

      public static long getLongDividedCeil(long nDividend, long nDivisor)
    • getLongDividedFloor

      public static long getLongDividedFloor(long nDividend, long nDivisor)
    • getLongDivided

      public static long getLongDivided(long nDividend, long nDivisor, @Nonnull RoundingMode eRoundingMode)
    • canConvertLongToInt

      public static boolean canConvertLongToInt(long nValue)
    • getLongAsInt

      @CheckReturnValue public static int getLongAsInt(long nValue, int nFallback)
    • getMaxInt

      public static int getMaxInt(int nValue, @Nonnull int... aValues)
    • getMaxLong

      public static long getMaxLong(long nValue, @Nonnull long... aValues)
    • getMaxFloat

      public static double getMaxFloat(float fValue, @Nonnull float... aValues)
    • getMaxDouble

      public static double getMaxDouble(double dValue, @Nonnull double... aValues)
    • getMaxBigDecimal

      @Nonnull public static BigDecimal getMaxBigDecimal(@Nonnull BigDecimal aValue, @Nonnull BigDecimal... aValues)
    • getMaxBigInteger

      @Nonnull public static BigInteger getMaxBigInteger(@Nonnull BigInteger aValue, @Nonnull BigInteger... aValues)
    • getMinInt

      public static int getMinInt(int nValue, @Nonnull int... aValues)
    • getMinLong

      public static long getMinLong(long nValue, @Nonnull long... aValues)
    • getMinFloat

      public static double getMinFloat(float fValue, @Nonnull float... aValues)
    • getMinDouble

      public static double getMinDouble(double dValue, @Nonnull double... aValues)
    • getMinBigDecimal

      @Nonnull public static BigDecimal getMinBigDecimal(@Nonnull BigDecimal aValue, @Nonnull BigDecimal... aValues)
    • getMinBigInteger

      @Nonnull public static BigInteger getMinBigInteger(@Nonnull BigInteger aValue, @Nonnull BigInteger... aValues)
    • abs

      @Nonnegative public static int abs(int nValue)
      This is a fix for Math.abs as it would return Integer.MIN_VALUE for Integer.MIN_VALUE which is very unexpected. Instead an exception is thrown.
      Parameters:
      nValue - Input value
      Returns:
      the absolute value of the argument.
      Throws:
      IllegalArgumentException - if the input value is Integer.MIN_VALUE
    • abs

      @Nonnegative public static long abs(long nValue)
      This is a fix for Math.abs as it would return Long.MIN_VALUE for Long.MIN_VALUE which is very unexpected. Instead an exception is thrown.
      Parameters:
      nValue - Input value
      Returns:
      the absolute value of the argument.
      Throws:
      IllegalArgumentException - if the input value is Long.MIN_VALUE
    • abs

      @Nonnegative public static float abs(float fValue)
      This is a sanity method wrapping Math.abs (float), so that you don't have to think whether you need to invoke the abs method from this class or the one from Math directly.
      Parameters:
      fValue - Input value
      Returns:
      the absolute value of the argument.
    • abs

      @Nonnegative public static double abs(double dValue)
      This is a sanity method wrapping Math.abs (double), so that you don't have to think whether you need to invoke the abs method from this class or the one from Math directly.
      Parameters:
      dValue - Input value
      Returns:
      the absolute value of the argument.
    • abs

      @Nonnull public static BigDecimal abs(@Nonnull BigDecimal aValue)
      This is a sanity method wrapping BigDecimal.abs (double), so that you don't have to think whether you need to invoke the abs method from this class or the one from BigDecimal directly.
      Parameters:
      aValue - Input value
      Returns:
      the absolute value of the argument.
    • abs

      @Nonnull public static BigInteger abs(@Nonnull BigInteger aValue)
      This is a sanity method wrapping BigInteger.abs (double), so that you don't have to think whether you need to invoke the abs method from this class or the one from BigInteger directly.
      Parameters:
      aValue - Input value
      Returns:
      the absolute value of the argument.
    • isEQ0

      public static boolean isEQ0(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is = 0.
    • isNE0

      public static boolean isNE0(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is != 0.
    • isLT0

      public static boolean isLT0(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is < 0.
    • isLE0

      public static boolean isLE0(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≤ 0.
    • isGT0

      public static boolean isGT0(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is > 0.
    • isGE0

      public static boolean isGE0(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≥ 0.
    • isEQ1

      public static boolean isEQ1(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is = 1.
    • isNE1

      public static boolean isNE1(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is != 1.
    • isLT1

      public static boolean isLT1(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is < 1.
    • isLE1

      public static boolean isLE1(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≤ 1.
    • isGT1

      public static boolean isGT1(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is > 1.
    • isGE1

      public static boolean isGE1(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≥ 1.
    • isEQ10

      public static boolean isEQ10(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is = 10.
    • isNE10

      public static boolean isNE10(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is != 10.
    • isLT10

      public static boolean isLT10(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is < 10.
    • isLE10

      public static boolean isLE10(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≤ 10.
    • isGT10

      public static boolean isGT10(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is > 10.
    • isGE10

      public static boolean isGE10(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≥ 10.
    • isEQ100

      public static boolean isEQ100(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is = 100.
    • isNE100

      public static boolean isNE100(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is != 100.
    • isLT100

      public static boolean isLT100(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is < 100.
    • isLE100

      public static boolean isLE100(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≤ 100.
    • isGT100

      public static boolean isGT100(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is > 100.
    • isGE100

      public static boolean isGE100(@Nonnull BigDecimal aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≥ 100.
    • isEQ0

      public static boolean isEQ0(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is = 0.
    • isNE0

      public static boolean isNE0(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is != 0.
    • isLT0

      public static boolean isLT0(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is < 0.
    • isLE0

      public static boolean isLE0(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≤ 0.
    • isGT0

      public static boolean isGT0(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is > 0.
    • isGE0

      public static boolean isGE0(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≥ 0.
    • isEQ1

      public static boolean isEQ1(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is = 1.
    • isNE1

      public static boolean isNE1(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is != 1.
    • isLT1

      public static boolean isLT1(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is < 1.
    • isLE1

      public static boolean isLE1(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≤ 1.
    • isGT1

      public static boolean isGT1(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is > 1.
    • isGE1

      public static boolean isGE1(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≥ 1.
    • isEQ10

      public static boolean isEQ10(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is = 10.
    • isNE10

      public static boolean isNE10(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is != 10.
    • isLT10

      public static boolean isLT10(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is < 10.
    • isLE10

      public static boolean isLE10(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≤ 10.
    • isGT10

      public static boolean isGT10(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is > 10.
    • isGE10

      public static boolean isGE10(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≥ 10.
    • isEQ100

      public static boolean isEQ100(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is = 100.
    • isNE100

      public static boolean isNE100(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is != 100.
    • isLT100

      public static boolean isLT100(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is < 100.
    • isLE100

      public static boolean isLE100(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≤ 100.
    • isGT100

      public static boolean isGT100(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is > 100.
    • isGE100

      public static boolean isGE100(@Nonnull BigInteger aValue)
      Parameters:
      aValue - Value to compare. May not be null.
      Returns:
      true if the value is ≥ 100.
    • getWithoutTrailingZeroes

      @Nullable @CheckReturnValue public static BigDecimal getWithoutTrailingZeroes(@Nullable String sValue)
      Get the passed String as a BigDecimal without any trailing zeroes.
      Parameters:
      sValue - The String to be used as a BigDecimal to be modified. May be null.
      Returns:
      null if the input value is null.
    • getWithoutTrailingZeroes

      @Nullable @CheckReturnValue public static BigDecimal getWithoutTrailingZeroes(@Nullable BigDecimal aValue)
      Get the passed BigDecimal without any trailing zeroes. Examples:
      • new BigDecimal ("0.00000000") --> 0
      • new BigDecimal ("10") --> 10
      • new BigDecimal ("10.00000000") --> 10
      • new BigDecimal ("10.1") --> 10.1
      • new BigDecimal ("10.10000000") --> 10.1
      • new BigDecimal ("10.345") --> 10.345
      • new BigDecimal ("10.3450000000") --> 10.345
      Parameters:
      aValue - The BigDecimal to be modified. May be null.
      Returns:
      null if the input value is null.
    • getFractionDigits

      @Nonnegative public static int getFractionDigits(@Nonnull BigDecimal aBD)
      Get the number of effective fraction digits by the specified BigDecimal. Examples:
      • new BigDecimal ("10") --> 0
      • new BigDecimal ("10.00000000") --> 0
      • new BigDecimal ("10.1") --> 1
      • new BigDecimal ("10.10000000") --> 1
      • new BigDecimal ("10.345") --> 3
      • new BigDecimal ("10.3450000000") --> 3
      Parameters:
      aBD - The BigDecimal to check. May not be null.
      Returns:
      The minimum number of fraction digits. Always ≥ 0.
    • addPercent

      @Nonnull public static BigDecimal addPercent(@Nonnull BigDecimal aBase, @Nonnull BigDecimal aPercentage)
      Add x% to base
      Parameters:
      aBase - Base value. May not be null.
      aPercentage - Percentage value (0-100). May not be null.
      Returns:
      base + x% (=aBase * (100 + perc) / 100). Never null.
    • addPercent

      @Nonnull public static BigDecimal addPercent(@Nonnull BigDecimal aBase, @Nonnull BigDecimal aPercentage, @Nonnegative int nScale, @Nonnull RoundingMode eRoundingMode)
      Add x% to base
      Parameters:
      aBase - Base value. May not be null.
      aPercentage - Percentage value (0-100). May not be null.
      nScale - Maximum scale to achieve.
      eRoundingMode - Rounding mode to used. May not be null.
      Returns:
      base + x% (=aBase * (100 + perc) / 100). Never null.
    • subtractPercent

      @Nonnull public static BigDecimal subtractPercent(@Nonnull BigDecimal aBase, @Nonnull BigDecimal aPercentage)
      Subtract x% from base
      Parameters:
      aBase - Base value. May not be null.
      aPercentage - Percentage value (0-100). May not be null.
      Returns:
      base - x% (=aBase * (100 - perc) / 100). Never null.
    • subtractPercent

      @Nonnull public static BigDecimal subtractPercent(@Nonnull BigDecimal aBase, @Nonnull BigDecimal aPercentage, @Nonnegative int nScale, @Nonnull RoundingMode eRoundingMode)
      Subtract x% from base
      Parameters:
      aBase - Base value. May not be null.
      aPercentage - Percentage value (0-100). May not be null.
      nScale - Maximum scale to achieve.
      eRoundingMode - Rounding mode to used. May not be null.
      Returns:
      base - x% (=aBase * (100 - perc) / 100). Never null.
    • getPercentValue

      @Nonnull public static BigDecimal getPercentValue(@Nonnull BigDecimal aBase, @Nonnull BigDecimal aPercentage)
      Get x% from base
      Parameters:
      aBase - Base value. May not be null.
      aPercentage - Percentage value (0-100). May not be null.
      Returns:
      x% from base (=aBase * perc / 100). Never null.
    • getPercentValue

      @Nonnull public static BigDecimal getPercentValue(@Nonnull BigDecimal aBase, @Nonnull BigDecimal aPercentage, @Nonnegative int nScale, @Nonnull RoundingMode eRoundingMode)
      Get x% from base with rounding etc.
      Parameters:
      aBase - Base value. May not be null.
      aPercentage - Percentage value (0-100). May not be null.
      nScale - Maximum scale to achieve.
      eRoundingMode - Rounding mode to used. May not be null.
      Returns:
      x% from base (=aBase * perc / 100). Never null.
    • hypot

      public static double hypot(double a, double b)
      Parameters:
      a - a
      b - b
      Returns:
      sqrt(a*a + b*b) without under/overflow.
    • getUnsignedInt

      public static long getUnsignedInt(int n)
      Converts the passed signed integer to an unsigned long
      Parameters:
      n - Source int
      Returns:
      The unsigned long
    • toBigDecimal

      @Nonnull public static BigDecimal toBigDecimal(int n)
    • toBigDecimal

      @Nonnull public static BigDecimal toBigDecimal(long n)
    • toBigDecimal

      @Nonnull public static BigDecimal toBigDecimal(float f)
    • toBigDecimal

      @Nonnull public static BigDecimal toBigDecimal(double d)
    • toBigDecimal

      @Nonnull public static BigDecimal toBigDecimal(@Nonnull Number aNumber)
    • toBigDecimal

      @Nonnull public static BigDecimal toBigDecimal(@Nonnull String sNumber)
    • toBigInteger

      @Nonnull public static BigInteger toBigInteger(int n)
    • toBigInteger

      @Nonnull public static BigInteger toBigInteger(long n)
    • toBigInteger

      @Nonnull public static BigInteger toBigInteger(@Nonnull Number aNumber)
    • toBigInteger

      @Nonnull public static BigInteger toBigInteger(@Nonnull String sNumber)
    • isExactlyOneBitSetToOne

      public static boolean isExactlyOneBitSetToOne(int n)
      Check if only a single bit is set.
      Source: http://stackoverflow.com/questions/12483843/test-if-a-bitboard-have-only-one-bit-set-to-1
      Say n has any bits set, the least significant is bit number k. Then n-1 has the same bits as n for indices above k, a 0-bit in place k and 1-bits in the less significant places, so the bitwise and removes the least significant set bit from n. If n had only one bit set, the result becomes 0, if n had more bits set, the result is nonzero.
      Parameters:
      n - Source number
      Returns:
      true if exactly one bit is set
    • isExactlyOneBitSetToOne

      public static boolean isExactlyOneBitSetToOne(long n)
      Check if only a single bit is set.
      Source: http://stackoverflow.com/questions/12483843/test-if-a-bitboard-have-only-one-bit-set-to-1
      Say n has any bits set, the least significant is bit number k. Then n-1 has the same bits as n for indices above k, a 0-bit in place k and 1-bits in the less significant places, so the bitwise and removes the least significant set bit from n. If n had only one bit set, the result becomes 0, if n had more bits set, the result is nonzero.
      Parameters:
      n - Source number
      Returns:
      true if exactly one bit is set