工作中经常会遇到两个float类型的数值相减,这时候精确度会出现偏差,网上也会有一些方法,但是还是会有误差,这就让人很头疼了;别急,还是有办法解决的,哈哈!
1:可以先把float类型的数值转化为保留两位小数的字符串,
2:获取小数点的位置,把小数点去掉;
3:之后把两个字符串转化为int类型,进行相减
4:如果所得值是负值,就在负号之后加上0,确保相减之后的字符串长度在4位;如果所得值是正值,就确保字符串长度为3位;
5:最后把小说点加上,再转化为double类型即可;
public static double subtract(double d1,double d2){
String n1 = StringUtil.onPrice(d1);
String n2 = StringUtil.onPrice(d2);
int n1Index = n1.lastIndexOf(".");
int n2Index = n2.lastIndexOf(".");
double result= 0;
if(n1Index != -1 && n2Index != -2) {
int f1Count = n1.length() - (n1Index + 1);
int f2Count = n2.length() - (n2Index + 1);
n1 = n1.replace(".", "");
n2 = n2.replace(".", "");
if (f1Count == 1) {
n1 += "0";
}
if (f2Count == 1) {
n2 += "0";
}
int price1 = StringUtil.StrToInt(n1);
int price2 = StringUtil.StrToInt(n2);
String resultResult = String.valueOf(price1 - price2);
if ((price1 - price2) < 0){
if (resultResult.length() == 3){
resultResult = resultResult.substring(0,resultResult.length()-2)+"0"+resultResult.substring(resultResult.length()-2);
}else if (resultResult.length() == 2){
resultResult = resultResult.substring(0,resultResult.length()-1)+"00"+resultResult.substring(resultResult.length()-1);
}
}
if (resultResult.length() == 2){
resultResult = "0" + resultResult;
}else if (resultResult.length() == 1){
resultResult = "00" + resultResult;
}
resultResult = resultResult.substring(0, resultResult.length() - 2) + "." + resultResult.substring(resultResult.length() - 2);
result= StringUtil.StrToDouble(resultResult);
}
return result;
}