`

BigInteger、BigDecimal、数字格式化

阅读更多

BigInteger与BigDecimal的目的是用来精确地表示大整数和小数,常用于商业计算中。

BigInteger:支持任意精度的整数,可以精确地表示任意大小的整数值,同时在运算过程中不会丢失任何信息。
BigDecimal:可以精确地表示任意精度的小数,同时在运算过程中不会丢失任何信息。

BigInteger与BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,由于创建对象会引起开销,因此它们不适合于大量的数学运算。

BigDecimal够造方法的参数类型有4种,其中的两个用BigInteger构造,另一个是用double构造,还有一个使用String构造。

 

应该避免使用double构造BigDecimal,因为:有些数字用double根本无法精确表示,传给BigDecimal构造方法时就已经不精确了。比如,new BigDecimal(0.1)得到的值是0.1000000000000000055511151231257827021181583404541015625。使用new BigDecimal("0.1")得到的值是0.1。因此,如果需要精确计算,用String构造BigDecimal,避免用double构造,尽管它看起来更简单!

equals()方法认为0.1和0.1是相等的,返回true,而认为0.10和0.1是不等的,结果返回false。方法compareTo()则认为0.1与0.1相等,0.10与0.1也相等。所以在从数值上比较两个BigDecimal值时,应该使用compareTo()而不是 equals()。

另外还有一些情形,任意精度的小数运算仍不能表示精确结果。例如,1除以9会产生无限循环的小数 .111111...。出于这个原因,在进行除法运算时,BigDecimal可以让您显式地控制舍入。

数字格式话一般会用到DecimalFormat、NumberFormat或则String.format:

DecimalFormat df1 = new DecimalFormat("#,###.000");
		System.out.println(df1.format(123456789.527));//1,234.527

		DecimalFormat df2 = new DecimalFormat("#.00");
		System.out.println(df2.format(1234.527));//1234.53,有四舍五入
		
		DecimalFormat df3 = new DecimalFormat("##.00%");    //##.00%   百分比格式,后面不足2位的用0补齐
		System.out.println(df3.format(0.527));//52.70%

		NumberFormat nf = NumberFormat.getPercentInstance();
		nf.setMinimumFractionDigits(3);    // 保留到小数点后几位
		System.out.println(nf.format(0.527));//52.700%

		System.out.println(String.format("%02d", 5));//05
		System.out.println(String.format("%.3f", 3.14159));//3.142,%. 表示小数点前任意位数, 2 表示两位小数, f 表示浮点型

		NumberFormat format = NumberFormat.getNumberInstance();
		format.setMinimumFractionDigits(3);//设置小数部分允许的最小位数
		format.setMaximumFractionDigits(5);//设置小数部分允许的最大位数
		format.setMaximumIntegerDigits(10);//设置整数部分允许的最大位数。
		format.setMinimumIntegerDigits(0);//设置整数部分允许的最小位数
		System.out.println(format.format(2132323213.23266666666)); 

 文章出处:http://blog.csdn.net/zero__007/article/details/51326496

分享到:
评论

相关推荐

    java.math.BigDecimal 操作类

    java.math.BigDecimal 操作类,包含加减乘除、String型加减乘除精度格式化转换计算等

    整理后java开发全套达内学习笔记(含练习)

    格式化输出 Formatter;格式化输入 Scanner;正则表达式 输出格式控制: 转义符: \ddd 1到3位8进制数指定Unicode字符输出(ddd) \uxxxx 1到4位16进制数指定Unicode字符输出(xxxx) \\ \ \' ' \" ...

    JAVA_API1.6文档(中文)

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    JDK_1_6 API

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    java jdk-api-1.6 中文 chmd

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    java api最新7.0

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    JavaAPI1.6中文chm文档 part1

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    JavaAPI中文chm文档 part2

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    [Java参考文档]

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    [Java参考文档].JDK_API 1.6

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    JDK_API_1_6_zh_CN_downcc.com.zip 良心一级分

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    Java 1.6 API 中文 New

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    java编程基础,应用与实例

    12.5 java.Math.BigInteger类 174 12.6 java.Math.BigDecimal类 176 12.7 巩固练习 177 第13章 Java输入与输出(I/O) 179 13.1 File类 179 13.2 流(stream) 182 13.2.1 InputStream与OutputStream 183...

Global site tag (gtag.js) - Google Analytics