Android java.lang.NumberFormatException:无效的双精度

Android java.lang.NumberFormatException:无效的双精度,android,google-maps,location,number-formatting,Android,Google Maps,Location,Number Formatting,我有一个计算两个纬度差的方法: 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 = M

我有一个计算两个纬度差的方法:

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:无效的双精度:“0179927” 位于java.lang.StringToReal.invalidReal(StringToReal.java:63) 位于java.lang.StringToReal.parseDouble(StringToReal.java:269)


有人能帮我解决这个问题吗?谢谢

double的值取决于设备的语言。例如,对于法语设备,数字0.179927变为0179927,由于逗号的原因,在将其解析为
double
时总是抛出
NumberFormatException

您需要将分隔符从
逗号
更改为
。 您可以通过设置区域设置或使用
十进制符号
来更改分隔符

如果希望分组分隔符为点,可以使用欧洲语言环境:

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);

您的dist_Traveled值包含,(逗号)检查您的dist_Traveled是否正确,但我设置dist_Traveled的格式(双精度,键入#####)。不是,为什么我再次格式化。切换到,?不需要再次转换。但您需要检查为什么dist_会给出(逗号)