当前位置: 代码网 > it编程>编程语言>Java > BigDecimal如何保留两位小数

BigDecimal如何保留两位小数

2026年04月01日 Java 我要评论
前言在项目中经常会用到小数的一些计算,而float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而

前言

在项目中经常会用到小数的一些计算,而float和double类型的主要设计目标是为了科学计算和工程计算。

他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。

然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。

但是,商业计算往往要求结果精确。所以有时候必须要采用bigdecimal。

1.代码实现

代码如下(示例):

public class demo {
   public static void main(string[] args) {
  		bigdecimal a =null;
  		integer faultrate = 6;
  		a = bigdecimal.valueof(faultrate.doublevalue()/3);
  		bigdecimal  b =a.setscale(2, roundingmode.half_up);//保留两位小数
  		system.out.println("结果是"+b);
  		//下面将结果转化成百分比
  		numberformat percent = numberformat.getpercentinstance();
       percent.setmaximumfractiondigits(2);
       system.out.println(percent.format(b.doublevalue()));
   }
}

运行结果:


2.方法详解

  • bigdecimal.setscale()方法用于格式化小数点
  • setscale(1)表示保留一位小数,默认用四舍五入方式
  • setscale(1,bigdecimal.round_down)直接删除多余的小数位,如2.35会变成2.3
  • setscale(1,bigdecimal.round_up)进位处理,2.35变成2.4
  • setscale(1,bigdecimal.round_half_up)四舍五入,2.35变成2.4
  • setscaler(1,bigdecimal.round_half_down)四舍五入,2.35变成2.3,如果是5则向下舍
  • setscaler(1,bigdecimal.round_ceiling)接近正无穷大的舍入
  • setscaler(1,bigdecimal.round_floor)接近负无穷大的舍入,数字>0和round_up作用一样,数字<0和round_down作用一样
  • setscaler(1,bigdecimal.round_half_even)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

注释

1:scale指的是你小数点后的位数。

  • 比如123.456则score就是3.
  • score()就是bigdecimal类中的方法啊。
  • 比如:bigdecimal b = new bigdecimal(“123.456”);b.scale(),返回的就是3.

2:roundingmode是小数的保留模式。

  • 它们都是bigdecimal中的常量字段,有很多种。
  • 比如:bigdecimal.round_half_up表示的就是4舍5入。

3:pubilc bigdecimal divide(bigdecimal divisor, int scale, int roundingmode)的意思是说:

  • 我用一个bigdecimal对象除以divisor后的结果,并且要求这个结果保留有scale个小数位,
  • roundingmode表示的就是保留模式是什么,是四舍五入啊还是其它的,你可以自己选!

4:对于一般add、subtract、multiply方法的小数位

格式化如下:

  bigdecimal mdata = new bigdecimal("9.655").setscale(2, bigdecimal.round_half_up);
  system.out.println("mdata=" + mdata);

运行结果:

mdata=9.66

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com