double计算,小数计算,BigDecimal计算,货币计算,float计算,浮点计算

来源:互联网 发布:115个java面试题和答案 编辑:程序博客网 时间:2024/04/29 11:06

背景:

java中double、Double在小数计算时,比如金钱计算时,会出现“错误”的结果,必须使用BigDecimal计算,才能返回预期结果。


问题举例:

System.out.println(0.06+0.01);//0.06999999999999999


解决方法:

System.out.println(new BigDecimal("0.06").add(new BigDecimal("0.01")));//0.07
注意BigDecimal构造必须用字符串!!!!,否则问题同上!!!


BigDecimal常用方法:

add(BigDecimal)        加法
subtract(BigDecimal) 减法
multiply(BigDecimal)  乘法
divide(BigDecimal)     除法



浮点数比较大小注意事项!!

double之间在比较大小时,可以用==或>=

Double之间在比较大小时,只能用自身的compareTo(Double anotherDouble)方法,千万不要用==或>=

double d10 = 0.5;double d11 = 0.5;System.out.println(d10 == d11);//true,原因是double是基本类型,==两边是基本类型时 ,比较的是值Double d17 = 0.5;Double d18 = 0.5;System.out.println(d17 == d18);//false,原因是Double是对象,==两边是对象时 ,比较的是对象地址


小数/浮点数计算工具

import java.math.BigDecimal;public class MathUtil {/** * 加法 */public static Double add(Double a,Double b){BigDecimal n1=new BigDecimal(a.toString());BigDecimal n2=new BigDecimal(b.toString());return n1.add(n2).doubleValue();}/** * 减法 */public static Double subtract(Double a,Double b){BigDecimal n1=new BigDecimal(a.toString());BigDecimal n2=new BigDecimal(b.toString());return n1.subtract(n2).doubleValue();}/** * 乘法 */public static Double multiply(Double a,Double b){BigDecimal n1=new BigDecimal(a.toString());BigDecimal n2=new BigDecimal(b.toString());return n1.multiply(n2).doubleValue();}/** * 除法(保留2位小数,四舍五入) */public static Double divide(Double a,Double b){BigDecimal n1=new BigDecimal(a.toString());BigDecimal n2=new BigDecimal(b.toString());return n1.divide(n2,2,BigDecimal.ROUND_HALF_UP).doubleValue();}}



4 0