#java
#java
Вопрос:
У меня есть 2 значения
Строковая широта = «37.348541»; Строковая долгота = «-121.88627»;
Я хотел бы извлечь такие значения, как показано ниже, без какого-либо округления значений.
широта = «37.34»; долгота = «-121.88»;
Я попытался использовать DecimalFormat.format, но он выполняет некоторое округление, и я хочу извлечь точное значение.
Ответ №1:
Вы можете определить функцию, используя String#substring
и String#indexOf
, как показано ниже:
public class Main {
public static void main(String[] args) {
// Tests
System.out.println(getNumberUptoTwoDecimalPlaces("37.348541"));
System.out.println(getNumberUptoTwoDecimalPlaces("-121.88627"));
System.out.println(getNumberUptoTwoDecimalPlaces("-121.8"));
System.out.println(getNumberUptoTwoDecimalPlaces("-121.88"));
System.out.println(getNumberUptoTwoDecimalPlaces("-121.889"));
}
static String getNumberUptoTwoDecimalPlaces(String number) {
int indexOfPoint = number.indexOf('.');
if (indexOfPoint != -1 amp;amp; number.length() >= indexOfPoint 3) {
return number.substring(0, indexOfPoint 3);
} else {
return number;
}
}
}
Вывод:
37.34
-121.88
-121.8
-121.88
-121.88
Ответ №2:
Например:
String latitude = "37.348541";
int i = latitude.indexOf(".");
if(i > 0 amp;amp; i < latitude.length()-2) latitude = latitude.substring(i, i 2);
Ответ №3:
Вы можете использовать класс BigDecimal и ROUND_DOWN
опцию. Таким образом, код может выглядеть следующим образом:
BigDecimal number = new BigDecimal("123.13298");
BigDecimal roundedNumber = number.setScale(2, BigDecimal.ROUND_DOWN);
System.out.println(roundedNumber);
В противном случае вы также можете использовать собственный метод double и Math.floor или Math.ceil:
double number = 123.13598;
double roundedNumber = (number < 0 ? Math.ceil(number * 100) : Math.floor(number * 100)) / 100;
System.out.println(roundedNumber);
Комментарии:
1. Я думаю, что он специально ищет не округленное число, поэтому достаточно просто BigDecimal 🙂