栏目导航
热点推荐
- 三十条有用的 Java 编程规则
- Java制作水印图片源码
- Java常见异常及可能的导致原因
- Java中的修饰词使用方法总结
- J2EE系统异常的处理准则
- Java中的异常、断言、日志解析(
- Java面试技巧:Java面试题集锦(
- 面向Java开发人员的Scala指南:
- Java程序员:一刻钟精通正则表达
- 网友经验分享:学好java开发的关
- 专家解答:创建表格与数据库进行
- Java远程访问Domino数据库
阅览排行
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
1
上一篇:使用实时Java降低Java应用程序的易变性(3) 下一篇:Java6开发WebService入门