В Java арифметика с плавающей запятой не представлена точно. Например, этот Java-код:
float a = 1.2;
float b= 3.0;
float c = a * b;
if(c == 3.6){
System.out.println("c is 3.6");
}
else {
System.out.println("c is not 3.6");
}
Печатает «c is not 3.6».
Меня не интересует точность, превышающая 3 десятичных знака (#. ###). Как я могу справиться с этой проблемой, чтобы умножить числа с плавающей запятой и надежно их сравнить?
float a = 1.2f;
, и удваивает, какdouble d = 1.2d;
Также в вашем if-выражении:if(c == 3.6f)
- person Martijn Courteaux   schedule 24.05.2010Math.ulp()
. - person aeracode   schedule 25.03.2012BigDecimal
для плавающих и двойных манипуляций. См. ссылку. - person Aldis   schedule 20.11.2019