致命异常:java.lang.NumberFormatException
Fatal Exception: java.lang.NumberFormatException
当我从 GPS 获得一个新的位置坐标时,我时常遇到这个异常,我想对其进行格式化。
这是我的代码:
DecimalFormat decimalFormat = new DecimalFormat("0.00000");
location.setLatitude(Double.valueOf(decimalFormat.format(location.getLatitude())));
location.setLongitude(Double.valueOf(decimalFormat.format(location.getLongitude())));
为什么会这样?我从该位置返回的纬度和经度都是双打。我将其格式化,将其转换为所需的格式(小数点后 5 位小数),然后当我尝试进行双重备份时,它崩溃了。为什么会这样?为什么不是每次,只是有时?
崩溃示例:
Fatal Exception: java.lang.NumberFormatException
Invalid double: "52,36959"
这是我使用它的地方:
Log.i("","enteredd latitude is:" + location.getLatitude());
try{
DecimalFormat decimalFormat = new DecimalFormat("0.00000");
location.setLatitude(Double.valueOf(decimalFormat.format(location.getLatitude()).replace(",", ".")));
location.setLongitude(Double.valueOf(decimalFormat.format(location.getLongitude()).replace(",", ".")));
}catch (Exception e){
Log.e("","enteredd error deimal formating" + e.getMessage());
}
Log.i("","enteredd latitude is:" + location.getLatitude());
同样适用于:
location = LocationServices.FusedLocationApi.getLastLocation(PSLocationCenter.getInstance().mLocationClient);
问:这样能解决吗?
location.setLatitude(Double.valueOf(decimalFormat.format(location.getLatitude()).replace(",", ".")));
您正在将一个双精度值转换为十进制格式,然后将其解析回双精度并使用您从变量 location
中获得的完全相同的值来设置 location
的值.这里面有太多糟糕的逻辑。
location.setLatitude(Double.valueOf(decimalFormat.format(location.getLatitude())));
location.setLongitude(Double.valueOf(decimalFormat.format(location.getLongitude())));
location.getLatitude是纬度,不需要设置。
您需要设置小数点分隔符:
DecimalFormat decimalFormat = new DecimalFormat("0.00000");
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator('.');
decimalFormat.setDecimalFormatSymbols(dfs);
从这里开始:(android) decimalformat, uses comma in place of fullstop while formatting with "#.##"
还有:
获取位置。
double latitude = location.getLatitude();
double longitude = location.getLongitude();
出于您的应用的目的,您不需要更改此设置。
只需将值传递给您需要的服务器:
String lat = decimalFormat(latitude);
String long = decimalFormat(longitude);
当我从 GPS 获得一个新的位置坐标时,我时常遇到这个异常,我想对其进行格式化。
这是我的代码:
DecimalFormat decimalFormat = new DecimalFormat("0.00000");
location.setLatitude(Double.valueOf(decimalFormat.format(location.getLatitude())));
location.setLongitude(Double.valueOf(decimalFormat.format(location.getLongitude())));
为什么会这样?我从该位置返回的纬度和经度都是双打。我将其格式化,将其转换为所需的格式(小数点后 5 位小数),然后当我尝试进行双重备份时,它崩溃了。为什么会这样?为什么不是每次,只是有时?
崩溃示例:
Fatal Exception: java.lang.NumberFormatException
Invalid double: "52,36959"
这是我使用它的地方:
Log.i("","enteredd latitude is:" + location.getLatitude());
try{
DecimalFormat decimalFormat = new DecimalFormat("0.00000");
location.setLatitude(Double.valueOf(decimalFormat.format(location.getLatitude()).replace(",", ".")));
location.setLongitude(Double.valueOf(decimalFormat.format(location.getLongitude()).replace(",", ".")));
}catch (Exception e){
Log.e("","enteredd error deimal formating" + e.getMessage());
}
Log.i("","enteredd latitude is:" + location.getLatitude());
同样适用于:
location = LocationServices.FusedLocationApi.getLastLocation(PSLocationCenter.getInstance().mLocationClient);
问:这样能解决吗?
location.setLatitude(Double.valueOf(decimalFormat.format(location.getLatitude()).replace(",", ".")));
您正在将一个双精度值转换为十进制格式,然后将其解析回双精度并使用您从变量 location
中获得的完全相同的值来设置 location
的值.这里面有太多糟糕的逻辑。
location.setLatitude(Double.valueOf(decimalFormat.format(location.getLatitude())));
location.setLongitude(Double.valueOf(decimalFormat.format(location.getLongitude())));
location.getLatitude是纬度,不需要设置。
您需要设置小数点分隔符:
DecimalFormat decimalFormat = new DecimalFormat("0.00000");
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator('.');
decimalFormat.setDecimalFormatSymbols(dfs);
从这里开始:(android) decimalformat, uses comma in place of fullstop while formatting with "#.##"
还有:
获取位置。
double latitude = location.getLatitude();
double longitude = location.getLongitude();
出于您的应用的目的,您不需要更改此设置。
只需将值传递给您需要的服务器:
String lat = decimalFormat(latitude);
String long = decimalFormat(longitude);