<1>float和double的精度是由尾数的位数来决定的。尾数的位数是固定的,所以精度有个范围,超出精度就会出错。还有对计算有影响的是十进制转换成二进制时有误差以及float和double做四则运算误差
<2>要避免浮点数计算出错就用BigDecimal类,BigDecimal是处理高精度的浮点数运算的常用的一个类。
<3>BigDecimal使用
构造器描述
BigDecimal(int) 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。
方法描述
add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。
toString() 将BigDecimal对象的数值转换成字符串。
doubleValue() 将BigDecimal对象中的值以双精度数返回。
floatValue() 将BigDecimal对象中的值以单精度数返回。
longValue() 将BigDecimal对象中的值以长整数返回。
intValue() 将BigDecimal对象中的值以整数返回。
其他方法等等,需要了解再查
当需要将BigDecimal中保存的浮点数值打印出来,特别是在页面上显示的时候,就有可能遇到预想之外的科学技术法表示的问题。一般直接使用BigDecimal.stripTrailingZeros().toPlainString()方法即可以完成浮点数的打印。toString()方法输出的字符串并不能保证不是科学计数法。