平均速度计算返回“无穷大”

时间:2014-06-27 19:04:03

标签: java math

在我的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。但是,当我打印出结果时,它表示“无穷大”,就像我将其除以零一样。

有人看到我的方法是错误的还是为什么我得到这个奇怪的答案?

3 个答案:

答案 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.");
  }
}

enter image description here

或者您可以使用:

    km * 3600
------------------  =  Average time kmh
   millisecond
相关问题