Это правильный результат, потому что работа с двойными не точна, как работа с целочисленными типами.
Вот почему, если вы сравниваете два double
числа, вам нужно что-то сделать. как это:
public static boolean isEqual(double one, double two) {
return one >= two - 1E6 && one <= two + 1E6;
}
P.S. 4.2.3. Типы с плавающей точкой, форматы и значения
Если вы хотите напечатать правильное значение, вы должны использовать BigDecimal
:
BigDecimal val = BigDecimal.valueOf(91000);
BigDecimal res = val.multiply(BigDecimal.valueOf(0.7));
System.out.println(res); // 63000.0
В некоторых случаях вы можете увеличить точность:
long value = 91000L;
System.out.println(value * 0.7); // 63699.99999999999
System.out.println((value * 7) / 10); // 63700