Mercurial > projects > dwt2
view base/src/java/math/BigDecimal.d @ 98:48d4ee626868
rm databinding.observable seems to be duplicate, databinding.beans now building
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Wed, 22 Apr 2009 07:30:21 +0200 |
parents | b2d6122fa189 |
children | 9f4c18c268b2 |
line wrap: on
line source
module java.math.BigDecimal; import java.lang.all; import java.math.BigInteger; class BigDecimal : Number { static int ROUND_CEILING; static int ROUND_DOWN; static int ROUND_FLOOR; static int ROUND_HALF_DOWN; static int ROUND_HALF_EVEN; static int ROUND_HALF_UP; static int ROUND_UNNECESSARY; static int ROUND_UP; private BigInteger intVal; private int scale_; private int intCompact; private int precision; private static const MAX_BIGINT_BITS = 62; this(BigInteger val){ implMissing(__FILE__, __LINE__); } this(BigInteger unscaledVal, int scale_){ this.intVal = unscaledVal; this.scale_ = scale_; } this(double val){ if (double.nan is val || double.infinity is val ) throw new NumberFormatException("Infinite or NaN"); // Translate the double into sign, exponent and significand, according // to the formulae in JLS, Section 20.10.22. long valBits = *cast(long*) & val; int sign = ((valBits >> 63)==0 ? 1 : -1); int exponent = cast(int) ((valBits >> 52) & 0x7ffL); long significand = (exponent==0 ? (valBits & ((1L<<52) - 1)) << 1 : (valBits & ((1L<<52) - 1)) | (1L<<52)); exponent -= 1075; // At this point, val == sign * significand * 2**exponent. /* * Special case zero to supress nonterminating normalization * and bogus scale calculation. */ if (significand == 0) { intVal = BigInteger.ZERO; intCompact = 0; precision = 1; return; } // Normalize while((significand & 1) == 0) { // i.e., significand is even significand >>= 1; exponent++; } // Calculate intVal and scale intVal = BigInteger.valueOf(sign*significand); if (exponent < 0) { intVal = intVal.multiply(BigInteger.valueOf(5).pow(-exponent)); scale_ = -exponent; } else if (exponent > 0) { intVal = intVal.multiply(BigInteger.valueOf(2).pow(exponent)); } if (intVal.bitLength() <= MAX_BIGINT_BITS) { intCompact = intVal.longValue(); } } this(String val){ implMissing(__FILE__, __LINE__); } BigDecimal abs(){ implMissing(__FILE__, __LINE__); return null; } BigDecimal add(BigDecimal val){ implMissing(__FILE__, __LINE__); return null; } int compareTo(BigDecimal val){ implMissing(__FILE__, __LINE__); return 0; } int compareTo(Object o){ implMissing(__FILE__, __LINE__); return 0; } BigDecimal divide(BigDecimal val, int roundingMode){ implMissing(__FILE__, __LINE__); return null; } BigDecimal divide(BigDecimal val, int scale_, int roundingMode){ implMissing(__FILE__, __LINE__); return null; } double doubleValue(){ implMissing(__FILE__, __LINE__); return 0; } bool equals(Object x){ implMissing(__FILE__, __LINE__); return 0; } float floatValue(){ implMissing(__FILE__, __LINE__); return 0; } int hashCode(){ implMissing(__FILE__, __LINE__); return 0; } int intValue(){ implMissing(__FILE__, __LINE__); return 0; } long longValue(){ implMissing(__FILE__, __LINE__); return 0; } BigDecimal max(BigDecimal val){ implMissing(__FILE__, __LINE__); return null; } BigDecimal min(BigDecimal val){ implMissing(__FILE__, __LINE__); return null; } BigDecimal movePointLeft(int n){ implMissing(__FILE__, __LINE__); return null; } BigDecimal movePointRight(int n){ implMissing(__FILE__, __LINE__); return null; } BigDecimal multiply(BigDecimal val){ implMissing(__FILE__, __LINE__); return null; } BigDecimal negate(){ implMissing(__FILE__, __LINE__); return null; } int scale(){ implMissing(__FILE__, __LINE__); return this.scale_; } BigDecimal setScale(int scale_){ implMissing(__FILE__, __LINE__); return null; } BigDecimal setScale(int scale_, int roundingMode){ implMissing(__FILE__, __LINE__); return null; } int signum(){ implMissing(__FILE__, __LINE__); return 0; } BigDecimal subtract(BigDecimal val){ implMissing(__FILE__, __LINE__); return null; } BigInteger toBigInteger(){ implMissing(__FILE__, __LINE__); return null; } String toString(){ implMissing(__FILE__, __LINE__); return null; } BigInteger unscaledValue(){ implMissing(__FILE__, __LINE__); return null; } static BigDecimal valueOf(long val){ implMissing(__FILE__, __LINE__); return null; } static BigDecimal valueOf(long unscaledVal, int scale_){ implMissing(__FILE__, __LINE__); return null; } }