我是靠谱客的博主 大气人生,这篇文章主要介绍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(1234.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)); 2,132,323,213.23267

最后

以上就是大气人生最近收集整理的关于BigInteger、BigDecimal、数字格式化的全部内容,更多相关BigInteger、BigDecimal、数字格式化内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部