致命异常: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);