首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>java教程>资讯:Java5:BigInteger、BigDecimal详解

Java5:BigInteger、BigDecimal详解

www.jz123.cn  2010-10-22   来源:   中国建站    责任编辑(袁袁)    我要投递新闻

 

 二、java.math.BigDecimal

  不可变的、任意精度的有符号十进制数。与之相关的还有两个类:


  java.math.MathContext:

  该对象是封装上下文设置的不可变对象,它描述数字运算符的某些规则,如数据的精度,舍入方式等。

  java.math.RoundingMode:这是一种枚举类型,定义了很多常用的数据舍入方式。

  这个类用起来还是很比较复杂的,原因在于舍入模式,数据运算规则太多太多,不是数学专业出身的人看着中文API都难以理解,这些规则在实际中使用的时候在翻阅都来得及。


 package lavasoft;
  import java.math.BigDecimal;
  import java.math.MathContext;
  import java.math.RoundingMode;
  /**
  * 测试BigDecimal
  *
  * @author leizhimin 2009-11-17 12:50:03
  */
  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
  Process finished with exit code 0

  最后回顾下本文所涉及的API范围:

  java.math包:

  类

  BigDecimal

  BigInteger

  MathContext

  枚举

  RoundingMode

  掌握了构造方式,和常见的数学运算,在开发中一般够用了。

  本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/228705

上一篇:使用实时Java降低Java应用程序的易变性(3) 下一篇:Java6开发WebService入门

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图