2016-06-06 1 views
3

나는 두 위도 사이의 차이를 계산하는 방법이 있습니다java.lang.NumberFormatException의 : 잘못된 더블

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; 

} 

때때로,이 방법 던져 예외 (내가 한 차이가 장치에서 테스트 할 때 내가 가끔 말) :

java.lang.NumberFormatException의 : 잘못된 이중 : "0,179927"java.lang.StringToReal.parseDouble에서 java.lang.StringToReal.invalidReal (StringToReal.java:63) 에서 (StringToReal.java:269)

이 경우 누군가 나를 도울 수 있습니까? 감사합니다

+0

당신의 dist_travelled 값이 포함, (쉼표)를 확인하여이 제대로 –

+0

하지만 dist_travelled를 포맷 dist_travelled (유형 더블 :이 기호는 다른 사람의 사이에서 소수점, 그룹화 단락, 마이너스 기호와 퍼센트 기호를 포함 ##. ####). 왜, 내가 다시 포맷 할 때. 로 전환 , ? –

+0

다시 변환 할 필요가 없습니다. dist_travelled가주는 이유 (쉼표)를 확인해야합니다. –

답변

3

이중 값은 장치의 언어에 따라 다릅니다. 예를 들어, 프랑스어로 된 기기의 경우 0.1799270,179927이되며 쉼표로 인해 double으로 구문 분석 할 때 항상 NumberFormatException이 표시됩니다.

구분 기호를 comma에서 point으로 변경해야합니다. 로케일을 설정하거나 DecimalFormatSymbols을 사용하여 구분 기호를 변경할 수 있습니다. format에 의해 생성 된 형식의 숫자에 나타나는 기호를 변경

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

은 또한 당신이 DecimalFormatSymbols 클래스를 사용할 수 있습니다 : 당신이 포인트로 그룹화 구분 기호를 원하는 경우

, 당신은 유럽 로케일을 사용할 수 있습니다 방법.

DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale); 
otherSymbols.setDecimalSeparator(','); 
otherSymbols.setGroupingSeparator('.'); 
DecimalFormat df = new DecimalFormat(formatString, otherSymbols);