java中数字的计算事件很烦,也很容易出错的地方,比如网上找来的这样的例子
public class Test {
public static void main(String[] args) {
System.out.println(0.05+0.01);
System.out.println(1.0-0.42);
System.out.println(4.015*100);
System.out.println(123.3/100);
}
}
你觉得他们输出的结果会是多小呢?
0.06 0.58 401.5 1.233
事实是

程序有时候也会给我们开一个玩笑,如果用在金额的计算上将会出现很大的问题。
问题原因呢,当我们用double 、float类型时,计算要千万注意丢失精度的问题。
所以如何计算呢?
BigDecimal进行商业中精度要求较高的计算。
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
double a = 0.05;
double b = 0.01;
double c = 1.0;
double d = 0.42;
double e = 4.015;
int f = 100;
String g = "123.3";
// 转成BigDecimal类型,注意new时参数转成String类型
BigDecimal biga = new BigDecimal(Double.toString(a));
BigDecimal bigb = new BigDecimal(Double.toString(b));
BigDecimal bigc = new BigDecimal(Double.toString(c));
BigDecimal bigd = new BigDecimal(Double.toString(d));
BigDecimal bige = new BigDecimal(Double.toString(e));
BigDecimal bigf = new BigDecimal(Double.toString(f));
BigDecimal bigg = new BigDecimal(g);
System.out.println(biga.add(bigb)); // 加法
System.out.println(bigc.subtract(bigd)); // 減法
System.out.println(bige.multiply(bigf)); // 乘法
System.out.println(bigg.divide(bigf)); // 除法
}
}
结果
0.05
0.06
0.58
401.5000
1.233
关于详细的BigDecimal详细的介绍看Java之BigDecimal详解
关于金额的格式化里边也有详细的介绍,计算的精度等(这里推荐看一下银行家舍入算法
)。
网友评论