【java基础】大数据的处理:java.math.Number/BigInteger/BigDecimal
2013-01-24 19:26
555 查看
public abstract class Number extends Object implements Serializable
抽象类Number是BigDecimal、BigInteger、Byte、Double、Float、Integer、Long和Short类的超类。
Number的子类必须提供将表示的数值转换为byte、double、float、int、long和short的方法。
BigInteger 不可变的任意精度的整数。 此类的用法比较简单些,也不存在舍入等操作。
public class BigInteger extends Number implements Comparable<BigInteger>通过代码进行分析:
package newTest; import java.math.BigInteger; import java.util.Random; public class TestBigInteger { public static void main(String[] args) { System.out .println("-------------------构造BigInteger---------------------"); // 通过byte数组来创建BigInteger BigInteger bi1 = new BigInteger(new byte[] { 1, 1 }); System.out.println("bi1=" + bi1.toString()); // 创建带符号的BigInteger BigInteger bi2 = new BigInteger(-1, new byte[] { 1, 1 }); System.out.println("bi2=" + bi2.toString()); // 创建带符号的BigInteger随机数 BigInteger bi3 = new BigInteger(128, 20, new Random()); System.out.println("bi3=" + bi3.toString()); // 通过10进制字符串创建带符号的BigInteger BigInteger bi4 = new BigInteger("12342342342342123423423412341"); System.out.println("bi4=" + bi4.toString()); // 通过10进制字符串创建带符号的BigInteger BigInteger bi5 = new BigInteger("88888888888888888888888888888", Character.digit('a', 33)); System.out.println("bi5=" + bi5.toString()); System.out.println("BigInteger的常量:"); System.out.println("BigInteger.ZERO=" + BigInteger.ZERO); System.out.println("BigInteger.ONE=" + BigInteger.ONE); System.out.println("BigInteger.TEN=" + BigInteger.TEN); System.out.println("-------------------使用BigInteger---------------------"); System.out.println("bi1的相反数=" + bi1.negate()); System.out.println("bi1+bi2=" + bi1.add(bi2)); System.out.println("bi1-bi2=" + bi1.subtract(bi2)); System.out.println("bi1*bi2=" + bi1.multiply(bi2)); System.out.println("bi1/bi2=" + bi1.divide(bi2)); System.out.println("bi1的10次方=" + bi1.pow(10)); System.out.println("bi1的10次方=" + bi1.pow(1)); BigInteger[] bx = bi4.divideAndRemainder(bi1); System.out.println(">>>:bx[0]=" + bx[0] + ",bx[1]=" + bx[1]); System.out.println("bi2的绝对值=" + bi2.abs()); } }执行结果:
-------------------构造BigInteger--------------------- bi1=257 bi2=-257 bi3=283850198491080836133123474213387850343 bi4=12342342342342123423423412341 bi5=88888888888888888888888888888 BigInteger的常量: BigInteger.ZERO=0 BigInteger.ONE=1 BigInteger.TEN=10 -------------------使用BigInteger--------------------- bi1的相反数=-257 bi1+bi2=0 bi1-bi2=514 bi1*bi2=-66049 bi1/bi2=-1 bi1的10次方=1256988294225653106805249 bi1的10次方=257 >>>:bx[0]=48024678374872075577523005,bx[1]=56 bi2的绝对值=257
BigDecimal 不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal
表示的数值是 (unscaledValue × 10-scale)。可处理float类型的数据加减乘除有误差的问题。
public class BigDecimal extends Number implements Comparable<BigDecimal>通过代码进行分析:
package newTest; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; public class TestBigDecimal { public static void main(String[] args) { System.out.println("------------构造BigDecimal-------------"); // 从char[]数组来创建BigDecimal BigDecimal bd1 = new BigDecimal("123456789.123456888".toCharArray(), 4,12); System.out.println("bd1=" + bd1); // 从char[]数组来创建BigDecimal BigDecimal bd2 = new BigDecimal("123456789.123456111133333213" .toCharArray(), 4, 18, MathContext.DECIMAL128); System.out.println("bd2=" + bd2); // 从字符串创建BigDecimal BigDecimal bd3 = new BigDecimal("123456789.123456111133333213"); System.out.println("bd3=" + bd3); // 从字符串创建BigDecimal,3是有效数字个数 BigDecimal bd4 = new BigDecimal("88.456", new MathContext(3, RoundingMode.UP)); System.out.println("bd4=" + bd4); System.out.println("------------使用BigDecimal-------------"); System.out.println("bd1+bd2=" + bd1.add(bd2)); System.out.println("bd1+bd2="+ bd1.add(bd2, new MathContext(24, RoundingMode.UP))); System.out.println("bd1-bd2=" + bd1.subtract(bd2).toPlainString()); System.out.println("bd1-bd2="+ bd1.subtract(bd2, new MathContext(24, RoundingMode.UP)).toPlainString()); System.out.println("bd1*bd2=" + bd1.multiply(bd2)); System.out.println("bd1*bd2="+ bd1.multiply(bd2, new MathContext(24, RoundingMode.UP))); System.out.println("bd1/bd4=" + bd1.divideToIntegralValue(bd4)); System.out.println("bd1/bd4="+ bd1.divideToIntegralValue(bd4, new MathContext(24,RoundingMode.UP))); System.out.println("bd1末位数据精度=" + bd1.ulp()); System.out.println("bd2末位数据精度=" + bd2.ulp()); System.out.println("bd2末位数据精度=" + bd2.ulp().toPlainString()); System.out.println("bd1符号:" + bd1.signum()); System.out.println("bd4的标度:" + bd4.scale()); } }执行结果:
------------构造BigDecimal------------- bd1=56789.123456 bd2=56789.123456111133 bd3=123456789.123456111133333213 bd4=88.5 ------------使用BigDecimal------------- bd1+bd2=113578.246912111133 bd1+bd2=113578.246912111133 bd1-bd2=-0.000000111133 bd1-bd2=-0.000000111133 bd1*bd2=3225004542.907120529593035648 bd1*bd2=3225004542.90712052959304 bd1/bd4=641.00000 bd1/bd4=641.00000 bd1末位数据精度=0.000001 bd2末位数据精度=1E-12 bd2末位数据精度=0.000000000001 bd1符号:1 bd4的标度:1
相关文章推荐
- java.math.BigDecimal 对浮点数据的精度处理
- Java基础——数据显示处理 DecimalFormat+BigDecimal
- java基础 基本包装类 System Math Array BigInteger BigDecimal
- Java基础——数据显示处理 DecimalFormat+BigDecimal
- 一次泛型引起的意外:java.math.BigDecimal cannot be cast to java.lang.Integer
- java.math.BigDecimal.stripTrailingZeros 对0的处理时注意了
- Java常用类库--Math、Random、NumberFormat、DecimalFormat、BigInteger、BigDecimal
- java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer解决
- Java大数据处理(BigInteger)
- java.math.BigDecimal 和java.math.BigInteger
- java.math.BigDecimal cannot be cast to java.lang.Integer
- 数据转换bug花了半天时间 Java.math.BigDecimal cannot be cast to java.lang.String
- java.math.BigInteger类型的数据转成int
- java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer
- java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer
- Java基础-14总结正则表达式,Pattern,Mactcher,Math,BigInteger,BigDeximal,System等
- Java.math.BigInteger/Java.math.BigDecimal
- 处理BigDecimal字段, java.math.BigDecimal cannot be cast to [Ljava.lang.Object;
- Java基础 - 正则,Math,Random,System,Date,SimpleDateFormat,Calendar,BigInteger,BigDecimal