android-java.lang.NumberFormatException:无效的double
作者:互联网
我有一种方法可以计算两个纬度之间的差异:
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;
}
有时,此方法会引发Exception(我有时会在defference设备中进行测试时说):
java.lang.NumberFormatException: Invalid double: “0,179927”
at java.lang.StringToReal.invalidReal(StringToReal.java:63)
at java.lang.StringToReal.parseDouble(StringToReal.java:269)
在这种情况下有人可以帮助我吗?谢谢
解决方法:
double的值取决于设备的语言.例如,对于法语设备,数字0.179927变为0,179927,由于逗号而将其解析为double时,它将始终抛出NumberFormatException.
您需要将分隔符从逗号更改为点.
您可以通过设置区域设置或使用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);
标签:google-maps,location,number-formatting,android 来源: https://codeday.me/bug/20191027/1940774.html