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