今天遇到了這樣的問題,就是浮點運算后數據比較出現錯誤,郁悶了半天,網上查了資料才發現浮點數直接用雙目運算符連接會出現結果不準確問題。解決方法如下:
1。所有浮點運算都在數據庫內做好,也就是都用sql實現了
2。用BigDecimal實現,方法如下(僅僅是個例子):
import java.math.BigDecimal;
public class tt {
/**
* @param args
*/
public static void main(String[] args) {
float a = 1.1f;
float b = 2.2f;
tt t = new tt();
System.out.println(t.add(a,b));
System.out.println(t.sub(a,b));
System.out.println(t.mul(a,b));
System.out.println(t.div(a,b));
System.out.println(t.round(a));
}
public float add(float v1,float v2){//加法
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.add(b2).floatValue();
}
public float sub(float v1,float v2){//減法
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.subtract(b2).floatValue();
}
public float mul(float v1,float v2){//乘法
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.multiply(b2).floatValue();
}
public float div(float v1,float v2){//除法
BigDecimal b1 = new BigDecimal(Float.toString(v1));
BigDecimal b2 = new BigDecimal(Float.toString(v2));
return b1.divide(b2,3,BigDecimal.ROUND_HALF_UP).floatValue();
}
public float round(float v){//截取3位
BigDecimal b = new BigDecimal(Float.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one,3,BigDecimal.ROUND_HALF_UP).floatValue();
}
}