开发距离转时间工具时,如何消除分数误差以获取正确时分秒?
问题:距离速度转时间工具的分钟计算错误
我正在开发一款“Distance & Speed to Time”工具,但分数问题导致分钟部分计算出错,小时部分的分数值没有被正确转换为分钟。比如输入距离130km、速度40km/hr时,期望结果是:
3 Hour(s) 15 Minute(s) 0 Second(s)
但实际得到:
3 Hour(s) 0 Minute(s) 0 Second(s)
错误代码
float Bx = 130; float By = 40; int x = (int) Bx; int y = (int) By; var KeepSecond = (x / y * 3600) ; var HourX = KeepSecond/3600; int Hour = (int) HourX; var MinuteX = (KeepSecond-(Hour*3600))/60; int Minute = (int) MinuteX; var SecondX = (KeepSecond-(Hour*3600)-(Minute*60)); int Second = (int) SecondX; String result = String.format(Hour+" Hour(s) "+Minute+" Minute(s) "+Second+" Second(s) "); Answer.setText(result);
问题原因及修复
问题核心是整数除法丢失了小数精度:你把浮点类型的Bx和By强制转成int后,x/y会执行整数除法,130/40得到的是3而非精确的3.25,后续计算自然丢失了0.25小时对应的15分钟。
修复后的代码:
float distance = 130; float speed = 40; // 直接用浮点运算计算总秒数,保留完整时间精度 double totalSeconds = (distance / speed) * 3600; int hour = (int) (totalSeconds / 3600); double remainingAfterHour = totalSeconds - hour * 3600; int minute = (int) (remainingAfterHour / 60); int second = (int) (remainingAfterHour - minute * 60); String result = String.format("%d Hour(s) %d Minute(s) %d Second(s)", hour, minute, second); Answer.setText(result);
修复说明
- 保留浮点类型的距离和速度,直接计算得到精确的小时数(3.25),再转换为总秒数11700
- 通过总秒数拆分出小时后,用剩余秒数计算分钟和秒,完整保留了小数部分的时间值
- 使用
String.format的占位符语法,让代码更简洁规范
内容的提问来源于stack exchange,提问作者teamlol studio
相关产品推荐
相关产品推荐

