工作中经常会遇到两个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; }