Чтобы проверить количество правильных знаков после запятой, вам просто нужен порядок величины разницы, а не порядок величины правильного результата. Итак, я полагаю, вам нужно преобразовать вычисленный результат double в BigDecimal, вычесть точный результат, затем преобразовать обратно в double и взять логарифм по основанию 10.
Или, если вам просто нужно проверить, является ли результат точным до x знаков после запятой, просто проверьте, превышает ли разница 0,5 * 10 ^ (-x) или эквивалентно:
int x = 3; // number of decimal places required
BigDecimal difference = accurateResult.subtract(new BigDecimal(approxResult));
BigDecimal testStat = difference.movePointRight(x).abs();
boolean ok = testStat.compareTo(new BigDecimal(0.5)) <= 0;
На самом деле это, вероятно, не совсем правильно, в зависимости от того, что именно вы подразумеваете под «исправить до x знаков после запятой» и насколько строгим вы должны быть. Вы могли бы сказать, что 0,15001 и 0,24999 равны 1 знаку после запятой (оба округляются до 0,2), но 0,19999 и 0,25001 не равны, хотя разница меньше. Если вы пойдете по этому пути, я думаю, вам просто нужно явно округлить оба числа до x знаков после запятой, а затем сравнить.
person
Ben
schedule
24.06.2011