Saturday, April 5, 2014

Get the difference between two double string

import java.math.BigDecimal;
import java.math.RoundingMode;


public class DoubleDiff {

public static void main(String[] args) {
System.out.println(getDiff("3.1E-4","0.0032"));
System.out.println(getDiff("0.0031","0.0032"));
System.out.println(getDiff("0.0031","0.003"));
System.out.println(getDiff("0.0031","0.00319"));
System.out.println(getDiff("1","1.9"));
System.out.println(getDiff("2","2.1"));
System.out.println(getDiff("1","2.1"));
System.out.println(getDiff("NA","2.1"));
System.out.println(getDiff("0","Str"));
}

//may contains E/e
public static String getDiff(String acClose,String ssClose){
String result = "";
try {
BigDecimal acCloseDouble = new BigDecimal(acClose);
BigDecimal ssCloseDouble = new BigDecimal(ssClose);
if(acCloseDouble.compareTo(ssCloseDouble)==0){
result = "0";
}
else{
if(acCloseDouble.scale()==ssCloseDouble.scale()){
result = acCloseDouble.subtract(ssCloseDouble).stripTrailingZeros().toPlainString();
}
else{
int minScale = Math.min(acCloseDouble.scale(), ssCloseDouble.scale());
acCloseDouble = acCloseDouble.setScale(minScale, RoundingMode.DOWN);
ssCloseDouble = ssCloseDouble.setScale(minScale, RoundingMode.DOWN);
result = acCloseDouble.subtract(ssCloseDouble).stripTrailingZeros().toPlainString();
}
}
//stripTrailingZeros may has no impact for 0.000 because of the scale
if(result.matches("0\\.0*")){
result = "0";
}
} catch (Exception e) {
result = acClose+"-"+ssClose;
// e.printStackTrace();
}
return result;
}

}

No comments:

Post a Comment