I have a problem for the managemente of decimal number in java (JDK 1.4).
I have two double numbers first and second (as output of formatted String). I do a sum between fist and second and I receive a number with more decimal digits!
final double first=198.4;//value extract by unmodifiable format method
final double second=44701.2;//value extract by unmodifiable format method
final double firstDifference= first+second; //I receive 44899.598 instead of 44899.6
final double calculatedDifference=44900.1; // comparison value for the flow
final double error=firstDifference-calculatedDifference;// I receive -0.50390605 instead 0.5
if(Math.abs(error)<=0.5d)){
//I must enter in this branch but the error not allows the correct flow!!!
}
/***
* the flow of program is uncorrect and there's a very visible bug in business view
*/
I prefer not growing the threshold value (0.5d) because I'm not safe with similar situation (when I started coding, the specs was talking about 0.1d as comparison value). If it's the only solution, the value of 0.9d is safest value for this problem?
How I can resolve this situation? I thinked that this problem derive by the use of double variables, but with the float I have the same problem.
Some idea (having some tested code line, if possible ;))?