java中BigDecimal的操作方法
本文实例讲述了java中BigDecimal的操作方法。分享给大家供大家参考。具体分析如下:
由于double,float的精度不够,因此在进行商业计算的时候要使用的BigDecimal。BigDecimal对象创建如下:
System.out.println(b);
输出结果为:12.000001;
BigDecimal在创建的时候可以传入String和double,但是最好使用String,至于原因看看如下代码就知道了:
System.out.println(b);
BigDecimal c = new BigDecimal(12.01);
System.out.println(c);
运行结果为:
12.000001
12.0099999999999997868371792719699442386627197265625
可以看出在传入double的时候精度会丢失。
BigDecimal其他操作如下:
public static BigDecimal add(String num1, String num2) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
return bd1.add(bd2);
}
//减法
public static BigDecimal subtract(String num1, String num2) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
return bd1.subtract(bd2);
}
//乘法
public static BigDecimal multiply(String num1, String num2) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
return bd1.multiply(bd2);
}
//除法
public static BigDecimal divide(String num1, String num2, int i) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
// i是要保留的位数, BigDecimal.ROUND_HALF_UP 表示四舍五入的规则
return bd1.divide(bd2, i, BigDecimal.ROUND_HALF_DOWN);
}
需要强调一下除法,第三个参数为是否四舍五入,
ROUND_HALF_DOWN表示遇5不进1,即1.5->1;
ROUND_HALF_UP表示遇5进1,即1.5->2;
但是有点需要注意:
当我们使用ROUND_HALF_DOWN时
System.out.println(this.divide("67.75", "5",1));
System.out.println("-------");
System.out.println(this.divide("67.751", "5",4));
System.out.println(this.divide("67.751", "5",1));
运行结果如下:
13.5500
13.5
-------
13.5502
13.6
我就纳闷了,按道理第二个结果应该是13.5啊!怎么成了13.6。后来经过多次测试,想了一下,这个四舍五入不是按照精度位后面移位与5做比较,而是按照精度位后的所有的数据与5做比较,也就是说:13.5500精确到一位,则用0.0500与5比较,而13.5502精确到一位,则用0.0502与5比较,比5大,所以就向上收。
希望本文所述对大家的Java程序设计有所帮助。
相关文章
SpringBoot使用freemarker导出word文件方法详解
这篇文章主要介绍了SpringBoot使用freemarker导出word文件方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧2022-11-11
Java 11 正式发布,这 8 个逆天新特性教你写出更牛的代码
美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用!这是自 Java 8 后的首个长期支持版本2018-09-09
SpringBoot中@ConfigurationProperties自动获取配置参数的流程步骤
当需要获取配置文件中很多参数时,我们可以定义参数的前缀相同,通过自动映射 进行获取配置文件中参数,所以本文给大家介绍了SpringBoot中@ConfigurationProperties自动获取配置参数的流程步骤,需要的朋友可以参考下2024-11-11
使用SpringBoot+Prometheus+Grafana实现可视化监控
本文主要给大家介绍了如何使用Spring actuator+监控组件prometheus+数据可视化组件grafana来实现对Spring Boot应用的可视化监控,文中有详细的代码供大家参考,具有一定的参考价值,需要的朋友可以参考下2024-02-02


最新评论