Возможный дубликат:
Сохранение точности с помощью Doubles в java
Перемещение десятичных знаков в двойном формате
Класс говорит сам за себя. Если вы выполните этот код, двойные значения кажутся несколько переполненными, но тогда это происходит не для всех значений, и, кроме того, если вы напечатаете число напрямую, результат будет в порядке.
public class test {
public static void main(String[] args){
for (double f=1.36; f<1.40; f+=0.01) System.out.println(f);
//Prints 1.36
// 1.37
// 1.3800000000000001 ???????
// 1.3900000000000001 ???????
System.out.println(1.36); //Prints 1.36
System.out.println(1.37); //Prints 1.37
System.out.println(1.38); //Prints 1.38
System.out.println(1.39); //Prints 1.39
}
}
Может кто-нибудь пролить свет? Если это ошибка, как лучше всего исправить ее в коде? Какое-нибудь волшебное решение?