`

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语言PPT学习教案.pptx

    这个类允许程序员根据特定的区域设置来格式化数字,类似于日期和时间的`DateFormat`类。但是,`NumberFormat`类的`getInstance()`方法返回的是本地化的格式化对象,对于需要更灵活的格式化方式,我们可以使用其子类`...

    java.math.BigDecimal 操作类

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

    java 数字格式转换异常(NumberFornatException)

    3. **使用`Byte`, `Short`, `Long`, `Float`, `BigInteger`, `BigDecimal`等类的转换方法**:这些类也有类似的转换方法,如果输入不符合它们的转换规则,都会抛出异常。 处理`NumberFormatException`的方法有以下几...

    BigDecimal计算

    5. **格式化**:`toPlainString()`方法返回不包含科学计数法的大数字符串,而`toString()`可能使用科学计数法。`format()`方法可用于自定义格式,但需要`DecimalFormat`类配合。 6. **精度控制**:`scale()`方法...

    JAVA格式输出,JAVA格式输出

    这个类提供了一组方法,使得我们能够格式化数字、货币值和百分比,以便它们按照特定的样式和区域设置显示。下面将详细讨论这些知识点。 首先,`NumberFormat`类提供了三个工厂方法来获取对应类型的格式器: 1. `...

    大数的 加 减 乘 除 开方运算Java版

    Java作为一种广泛应用的编程语言,提供了处理大数的功能,主要通过`...在实际项目中,可能还需要考虑性能优化、异常处理和格式化输出等问题。理解并熟练运用这些方法,对于编写能够处理大数据量计算的程序至关重要。

    java大数类[参考].pdf

    同时,它们还支持比较操作,如`compareTo()`,以及格式化输出,如`toString()`方法。 在实际编程中,`BigInteger`和`BigDecimal`类的使用通常伴随着性能上的牺牲,因为它们的计算速度远不及基本类型的运算。但是,...

    ACM之java速成.pdf

    文档中展示了如何使用DecimalFormat类来格式化数字输出,例如: ```java DecimalFormat fd = new DecimalFormat("#.00#"); DecimalFormat gd = new DecimalFormat("0.000"); System.out.println("x=" + fd.format(x)...

    Java实用经验总结--日期、数字篇

    - Java 提供了 `NumberFormat` 类用于数字的格式化,如 `DecimalFormat` 是一个子类,用于处理十进制数字。例如,`DecimalFormat df = new DecimalFormat("#.00")` 可以将数字格式化为两位小数。 - 对于数学运算,...

    java大数类.pdf

    它提供了许多方法来进行加减乘除以及幂运算,同时还能进行格式化输出。虽然在示例中没有直接使用`BigDecimal`,但在需要精确计算的场景下,例如金融计算,`BigDecimal`是不可或缺的。 在示例2中,计算n的阶乘,使用...

    java基础api总结

    本文将对Java API的一些基础知识进行总结,包括系统退出、数字格式化、流程控制、大数处理、数组操作以及类与对象的相关知识。 1. 系统退出: `System.exit(0)` 用于退出当前Java应用程序。它会结束当前的虚拟机...

    Java基础学习14.pdf

    本资源主要涵盖了Java的基础学习内容,特别是关于Object类、数字格式化、大数据计算以及日期处理等重要知识点。以下是这些内容的详细说明: 1. **Object类及其常见方法**: - Object类是所有Java类的根类,无论...

    java 大数加减法及乘法

    - **格式化**:如果涉及输入输出,还需要考虑如何正确地格式化大数,包括正负号和小数点的处理。 总的来说,理解和熟练使用`BigInteger`和`BigDecimal`类是Java开发中的一个重要技能,尤其在处理大数据量和高精度...

    BigNumber-源码.rar

    6. **格式化输出** `toPlainString()`和`toString()`方法分别用于生成不带科学计数法的字符串和可能包含科学计数法的字符串。这对于在用户界面或者日志中展示大数非常有用。 7. **性能考量** 虽然`BigDecimal`...

    JAVA api总结

    * DecimalFormat 类:数字格式化 * Math 类:数学函数 * format() 方法:将数字格式化为字符串 * parse() 方法:将字符串解析为数字 * abs() 方法:返回数字的绝对值 * random() 方法:返回随机数字 七、日期相关 ...

    java 速成及应用

    这两个类提供了大量的方法来执行大数的算术运算、比较、格式化等操作。例如:import java.math.BigInteger;public class Main{ public static void main(String[] args) { BigInteger a = new BigInteger(...

    Java期末复习-常用类库

    NumberFormat类用于数字的格式化,包括货币、百分比等。BigInteger和BigDecimal是大数处理类,用于处理超过long类型的整数和浮点数。 对象克隆技术通过实现Cloneable接口和覆盖clone方法实现对象的复制。Arrays类...

    acm中关于JAVA的细节

    此外,还可以使用`DecimalFormat`类来格式化数字,例如: ```java DecimalFormat fd = new DecimalFormat("#.00#"); // 不足位数不补0 DecimalFormat gd = new DecimalFormat("0.000"); // 不足位数补0 System.out....

    java源码整理包

    "java源码整理包"是一个集合,包含了与字符串(String)、日期(Date)、数据格式化(DataFormat)、数组(Array)、数字(Number)以及布尔(Boolean)相关的工具类源代码。这个包的目的是为了便于开发者学习和查阅这些常用工具...

Global site tag (gtag.js) - Google Analytics