致命异常:java.lang.NumberFormatException

时间:2015-12-10 13:01:53

标签: android double number-formatting numberformatexception decimalformat

我不时会收到此异常,当我从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(",", ".")));

1 个答案:

答案 0 :(得分:1)

您将一个double值放入十进制格式,然后将其解析为double并使用从变量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);