1 32 package net.sf.retrotranslator.runtime.java.math; 33 34 import java.math.*; 35 import net.sf.retrotranslator.runtime.impl.Advanced; 36 37 40 public class _BigDecimal { 41 42 public static final BigDecimal ZERO = BigDecimal.valueOf(0); 43 public static final BigDecimal ONE = BigDecimal.valueOf(1); 44 public static final BigDecimal TEN = BigDecimal.valueOf(10); 45 46 public static BigInteger convertConstructorArguments(int value) { 47 return BigInteger.valueOf(value); 48 } 49 50 public static BigInteger convertConstructorArguments(long value) { 51 return BigInteger.valueOf(value); 52 } 53 54 public static BigDecimal[] divideAndRemainder(BigDecimal dividend, BigDecimal divisor) { 55 BigDecimal[] result = new BigDecimal[2]; 56 BigDecimal quotient = divideToIntegralValue(dividend, divisor); 57 result[0] = quotient; 58 result[1] = dividend.subtract(quotient.multiply(divisor)); 59 return result; 60 } 61 62 public static BigDecimal divideToIntegralValue(BigDecimal dividend, BigDecimal divisor) { 63 BigDecimal quotient = dividend.divide(divisor, 0, BigDecimal.ROUND_DOWN); 64 if (dividend.scale() > divisor.scale()) { 65 quotient = quotient.setScale(dividend.scale() - divisor.scale()); 66 } 67 return quotient; 68 } 69 70 public static BigDecimal pow(BigDecimal bigDecimal, int n) { 71 if (n < 0 || n > 999999999) { 72 throw new ArithmeticException ("Invalid operation"); 73 } 74 BigDecimal result = ONE; 75 while (n-- > 0) { 76 result = result.multiply(bigDecimal); 77 } 78 return result; 79 } 80 81 public static BigDecimal remainder(BigDecimal dividend, BigDecimal divisor) { 82 return dividend.subtract(divideToIntegralValue(dividend, divisor).multiply(divisor)); 83 } 84 85 @Advanced 86 public static BigDecimal setScale(BigDecimal bigDecimal, int newScale, int roundingMode) { 87 if (newScale >= 0) { 88 return bigDecimal.setScale(newScale, roundingMode); 89 } 90 return bigDecimal.movePointRight(newScale).setScale(0, roundingMode).movePointLeft(newScale); 91 } 92 93 public static String toPlainString(BigDecimal bigDecimal) { 94 return bigDecimal.toString(); 95 } 96 97 public static BigDecimal valueOf(double val) { 98 return new BigDecimal(Double.toString(val)); 99 } 100 101 public static BigDecimal valueOf(long val) { 102 return BigDecimal.valueOf(val, 0); 103 } 104 105 106 } 107 | Popular Tags |