Встроенные методы отображения значимых фигур
Было много вопросов о округлении значащими цифрами, и ответы, которые предоставляют новый метод для округления, такой как:
Округление до произвольного числа значащих цифр
Округлить двойной до 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;
}