Android端英里转米及其他单位转公制问题求助
解决单位转换的问题:英里转公制单位(米/千米相关)
嘿,我看你在单位转换这块绕晕了,咱们先把代码里的矛盾点理清楚,再一步步修正~
首先,先明确几个关键的单位转换关系,避免混乱:
- 1英里 = 1609.344 米
- 1英里每小时(mph)= 0.44704 米每秒(m/s,公制单位)
- 1米每秒(m/s)= 3.6 千米每小时(km/h,公制单位)
你的代码里的核心问题
看你给出的代码片段:
Double speedInMilesPerHour = location.getSpeed()* 3.6; //inMeters requestParams.put("speed", Integer.toString(speedInMilesPerHour.intValue()));
这里有三个明显的矛盾:
- 变量名
speedInMilesPerHour表示「英里每小时」,但计算式location.getSpeed()*3.6是把米每秒(Android的Location.getSpeed()默认返回单位)转换成千米每小时,和英里完全没关系; - 注释写的
//inMeters,但计算结果既不是米,也不是米每秒,完全不匹配; - 你说要把英里转公制,但这段代码反而在把公制的米每秒转成另一个公制单位(千米每小时),逻辑完全偏离需求。
根据你的需求给出修正方案
分两种常见场景给你调整:
场景1:把英里每小时(英制)转成公制的米每秒
如果你拿到的速度是英里每小时,想转换成公制的米每秒:
// 假设你有一个英里每小时的输入值 double speedInMph = ...; // 你的英制速度数值 // 转成公制的米每秒 double speedInMetersPerSecond = speedInMph * 0.44704; // 存入参数(如果需要取整的话) requestParams.put("speed", Integer.toString((int)speedInMetersPerSecond));
场景2:把米每秒(公制)转成另一个公制单位(千米每小时)
如果你的location.getSpeed()确实是米每秒(Android默认),想转成更常用的公制千米每小时:
double speedInKilometersPerHour = location.getSpeed() * 3.6; requestParams.put("speed", Integer.toString((int)speedInKilometersPerHour)); // 注意变量名要准确,避免混淆,比如不要叫speedInMilesPerHour
补充:日期编码的异常捕获
你的日期代码片段截断了,记得补全UnsupportedEncodingException的捕获:
try { requestParams.put("date", URLEncoder.encode(dateFormat.format(date), "UTF-8")); } catch (UnsupportedEncodingException e) { // 这里可以加错误处理,比如打印日志或者提示用户 e.printStackTrace(); }
如果还是有问题,或者你的实际数据源/需求和我假设的不一样,欢迎把完整代码贴出来,我再帮你细化调整~
内容的提问来源于stack exchange,提问作者Sergey Petrosyan




