在我的Android谷歌地图应用程序中,我试图通过花费时间(以毫秒为单位)和距离(以米为单位)并对其执行下一次计算来计算平均速度:
private double avgSpeed = 0;
public void calcAvgSpeed(double distance, long time) {
distance = distance / 1000; //1000 = km
time = time / 3600000; // 1000 = sec, 60000 = min, 3600000 = hrs
avgSpeed = (double) (distance / time);
}
确保它有效我用calcAvgSpeed(300, 30000);
运行它,其中300是300米,30000是30000毫秒(或30秒)。我做的计算表明avgSpeed应该在方法之后为36。但是,当我打印出结果时,它表示“无穷大”,就像我将其除以零一样。
有人看到我的方法是错误的还是为什么我得到这个奇怪的答案?
答案 0 :(得分:4)
你是默认的除以零。
time = time / 3600000;
执行整数除法,因为time
的类型为long
。
要解决此问题,请使用类似
的内容avgSpeed = distance * 3600000 / time;
答案 1 :(得分:2)
更改
public void calcAvgSpeed(double distance, long time) {
到
public void calcAvgSpeed(double distance, double time) {
因为long是一个整数,如果你将long除以3600000,你将得到0(因为它四舍五入到整数部分)。
在这里你得到一个分零:
avgSpeed = (double) (distance / time);
哪个是无限的
答案 2 :(得分:0)
您可以使用此LINK中的此公式:
/**
*
* @Author: Aghatise Osazuwa
* Website: www.cscprogrammingtutorials.com
*
* Exercise 1.10 - Average Speed In Miles
*
*/
public class Ex1_10 {
public static void main(String[] args) {
System.out.println("Distance = 14km \nTime = 45 minutes 30 seconds = (45 x 60) + 30 \n"
+ " -------------- hours \n"
+ " 3600 \n"
+ "1 mile = 1.6 kilometers. \nAverage Speed in miles per hour = "
+ (14.0 / 1.6)/ (((45.0 * 60.0) + 30.0) / 3600) + " mph.");
}
}
或者您可以使用:
km * 3600
------------------ = Average time kmh
millisecond