Есть ли эквивалент для toPrecision () в Java?

При переносе алгоритма с JavaScript на Java я столкнулся с проблемой, что мне нужна замена toPrecision () в JavaScript. Проблема в том, что я понятия не имею, насколько малыми или большими будут числа, поэтому я не могу использовать простой NumberFormat с правильным форматом.

Есть ли стандартный класс, который предлагает аналогичную функциональность?

РЕДАКТИРОВАТЬ Вот что я придумал:

   double toPrecision(double n, double p) {
        if (n==0) return 0;

        double e = Math.floor(Math.log10(Math.abs(n)));
        double f = Math.exp((e-p+1)*Math.log(10));

        return Math.round(n/f)*f;
    }

В принципе, это правильно, но ошибки округления полностью разрушают его. Например, toPrecision(12.34567, 3) возвращается12.299999999999997

РЕДАКТИРОВАТЬ 2 Эта версия отлично работает для 11 из 12 тестовых случаев ...

   double toPrecision(double n, double p) {
        if (n==0) return 0;

        double e = Math.floor(Math.log10(Math.abs(n)));
        double f = Math.round(Math.exp((Math.abs(e-p+1))*Math.log(10)));
        if (e-p+1<0) {
            f = 1/f;
        }

        return Math.round(n/f)*f;
    }

НоtoPrecision(0.00001234567, 3) все еще возвращается1.2299999999999999E-5 вместо1.23E-5

Ответы на вопрос(6)

Ваш ответ на вопрос