Я согласен с Питером, я тоже не вижу, чтобы это произошло. Однако, если это продолжает происходить с вами, и если число десятичных дробей известно и зафиксировано в вашем сценарии использования в любом случае, использование «int» может быть решением, это даже быстрее, чем операции с плавающей запятой. Конечно, для представлений вам придется преобразовать их в плавающие точки.
я есть проблема для управления десятичного числа в Java (JDK 1.4).
У меня двадвойной чиселпервый а такжевторой (как вывод отформатированногострока). Я делаю сумму между первой и второй и получаю число с большим количеством десятичных цифр!
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
*/
Я предпочитаю не расти пороговое значение (0.5d) потому что я не в безопасности в аналогичной ситуации (когда я начал кодировать, спецификации говорили о0.1d в качестве значения сравнения). Если это единственное решение, значение0.9d самое безопасное значение для этой проблемы?
Как я могу разрешить эту ситуацию? Я думал, что эта проблема возникает из-за использования двойных переменных, но с плавающей точкой у меня та же проблема.
Какая-то идея (если есть возможность проверить строку кода, если это возможно;))?