最近在开发过程中碰到一个小问题,关于精确计算浮点数的。不管double类型还是float类型的数据如果直接用普通的+,-,*,/,来计算数值的话,是很容易出问题的。因为那只是适用于科学计数法,对于计算金钱来说是很忌讳的,很容易少那么一分两分的。想要精准计算浮点数,还得用java.math 提供的API类BigDecimal。
Bigdecimal有四种构造方法,BigDecimal(int),BigDecimal(long),BigDecimal(double),BigDecimal(String)。提供四种运算方法,加法:add(BigDecimal augend),减法:sbutract(BigDecimal subtranched),乘法:multiply(BigDecimal multiplicand),除法:divide(BigDecimal divisor)。
具体使用方法【以BigDecimal(double)构造方法为例,其他构造方法类似】:BigDecimal a1=new BigDecimal (double numble1);BigDecimal a2 = new BigDecimal (double numble2);
a1 + a2 : a1.add(a2); a1-a2: a1.subtract(a2);a1*a2: a1.muitiply(a2);a1/a2: a1.divide(a2); 结果都是BigDecimal 类型,可以根据需要将 BigDecimal类型结果换相应的类型。比如将a1+a2的结果转换为double类型:a1.add(a2).doubleValue()。通常可以配合java.text.DecimalFormat对象调用format方法来格式化你想要的结果。比如a1*a2保留两位小数:java.text.DecimalFormat
d= new java.text.DecimalFormat("0.00"); d.format(a1.multiply(a2));