2016-06-06 3 views
3

У меня есть метод, чтобы вычислить разницу между двумя Широта:java.lang.NumberFormatException: Invalid двойной

public static double distanceKM(LatLng latLng1, LatLng latLng2) { 
    int EARTH_RADIUS_KM = 6371; 
    double lat1Rad = Math.toRadians(latLng1.latitude); 
    double lat2Rad = Math.toRadians(latLng2.latitude); 
    double deltaLonRad = Math.toRadians(latLng2.longitude - latLng1.longitude); 

    double dist_travelled = Math 
      .acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad) 
        * Math.cos(lat2Rad) * Math.cos(deltaLonRad)) 
      * EARTH_RADIUS_KM; 

    dist_travelled = Double.parseDouble(new DecimalFormat("##.######") 
      .format(dist_travelled)); 

    return dist_travelled; 

} 

Иногда этот метод бросить исключение (я говорю иногда, когда я испытываю в defference устройстве):

java.lang.NumberFormatException: Недопустимый дважды: "0,179927" в java.lang.StringToReal.invalidReal (StringToReal.java:63) в java.lang.StringToReal.parseDouble (StringToReal.java:269)

Может ли кто-нибудь помочь мне в этом случае? Спасибо

+0

вашего dist_travelled значение содержит, (запятая) Проверьте dist_travelled правильно –

+0

Но я форматировать dist_travelled (двойной с типом ##. ####),. не,, почему, когда я форматирую снова,. переключить на , ? –

+0

вам не нужно конвертировать снова. но вам нужно проверить, почему dist_travelled дает, (запятая) –

ответ

3

Значение double зависит от языка устройства. Например, для устройств на французском языке номер 0.179927 становится 0,179927, который всегда будет вызывать NumberFormatException при разборе его на double из-за запятой.

Вам необходимо сменить сепаратор от comma до point. Вы можете изменить разделитель либо путем установки языкового стандарта, либо с помощью DecimalFormatSymbols.

Если вы хотите, чтобы разделитель группировки, чтобы быть точкой, вы можете использовать европейский языковой стандарт:

NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); 
DecimalFormat df = (DecimalFormat)nf; 

В качестве альтернативы вы можете использовать DecimalFormatSymbols класс для изменения символов, которые появляются в отформатированных чисел, производимых format метод. Эти символы включают десятичный разделитель, группирование разделитель, знак минус и знак процента, среди других:

DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale); 
otherSymbols.setDecimalSeparator(','); 
otherSymbols.setGroupingSeparator('.'); 
DecimalFormat df = new DecimalFormat(formatString, otherSymbols); 
Смежные вопросы