You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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()));

这里有三个明显的矛盾:

  1. 变量名speedInMilesPerHour表示「英里每小时」,但计算式location.getSpeed()*3.6是把米每秒(Android的Location.getSpeed()默认返回单位)转换成千米每小时,和英里完全没关系;
  2. 注释写的//inMeters,但计算结果既不是米,也不是米每秒,完全不匹配;
  3. 你说要把英里转公制,但这段代码反而在把公制的米每秒转成另一个公制单位(千米每小时),逻辑完全偏离需求。

根据你的需求给出修正方案

分两种常见场景给你调整:

场景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

火山引擎 最新活动