Извлечение цифровых значений из десятичных знаков до и после запятой в Java

#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 🙂