Встроенные методы отображения значимых фигур

Было много вопросов о округлении значащими цифрами, и ответы, которые предоставляют новый метод для округления, такой как:

Округление до произвольного числа значащих цифр

Округлить двойной до 2 десятичных знаков

Большинство из этих вопросов и решений около 2009~2010.

Я хочу иметь простой встроенный метод (или из стандартных хорошо известных библиотек, таких как Apache или Spring), который с учетом числа и значащих цифр выводит число, ограниченное указанной значащей цифрой.

То есть:

  • 123.456789 // до 2 значащих цифр: 120
  • 123.456789 // до 4 значащих цифр: 123.4
  • 123.456789 // до 7 значащих цифр: 123.4567

2 ответа

Я нашел этот хороший способ сделать это, используя формат String. По-видимому, пользователи могут указать максимальное количество значащих цифр в строковом формате "g" или "G". ( http://developer.android.com/reference/java/util/Formatter.html)

Это если вы просто хотите распечатать его.

public String toSignificantFiguresString(BigDecimal bd, int significantFigures){
    return String.format("%."+significantFigures+"G", bd);
}

Это если вы хотите конвертировать это:

public BigDecimal toSignificantFigures(BigDecimal bd, int significantFigures){
    String s = String.format("%."+significantFigures+"G", bd);
    BigDecimal result = new BigDecimal(s);
    return result;
}

Вот пример этого в действии:

    BigDecimal bd = toSignificantFigures(BigDecimal.valueOf(12345678.123456789), 10);
    System.out.println("bd: " + String.format("%f",bd));

NB: я использую BigDecimal для расчета, потому что у double и float есть проблемы с точностью.)

Не совсем верно. Чтобы получить это идеально:

public String toSignificantFiguresString(BigDecimal bd, int significantFigures ){
    String test = String.format("%."+significantFigures+"G", bd);
    if (test.contains("E+")){
        test = String.format(Locale.US, "%.0f", Double.valueOf(String.format("%."+significantFigures+"G", bd)));
    }
    return test;
}
Другие вопросы по тегам