2012-05-08 46 views
0

我正在研究一个函数,我正在计算计量单位的数量。对于仪表calcualtions规则是:实现单位转换

  • 上1.6公里AMT最低票价 - 12/-
  • 随后1公里AMT - 7/-
  • 25%的额外的旅程票价为午夜

我写的功能是:

public static void CalculateAutoFare(int kmIndex) { 
    double fare = 12.00; 
    double night = 15.00; 
    double subseIncre = 1.50; 
    double nightIncre = 0.25; 
    int j=0; 

    for (int i=1; i <= kmIndex; i++) { 

     if (i == 3 || j == 4) { 
      fare += 1.00f; 
      j =0; 
     } 
     else { 
      fare += subseIncre; 
      j++; 
     } 
     fare = Math.round(fare*2f)/2f; 
     double extra = ((double) fare * nightIncre); 
     night = fare + extra; 
     night = Math.round(night*2f)/2f; 

     System.out.println("I = " + i + " Fare = " + fare + " Night = " + night + " 25%Extra = " + extra); 
    } 

    System.out.println("Day = " + fare + " Night = " + night); 
} 

kmIndex是公里的指数。仪表读数分别为1.00,1.10,1.20,1.30 ... 1.90,2.00 ...因此kmIndex为1.00 = 0,1.10 = 1,1.20-3等等。

结果,我得到的每个码,应该是提到如下:

enter image description here

我已经工作到4.00,并在结果不正确的声明undet应该是相关不分日夜。

我在这方面做了很多工作,但无法按预期得到结果。如果我试图纠正一件事情,那么其他人得到错误或不给予预期的结果。任何人都可以帮助我解决这个问题。花了几乎整整一天的时间来解决这个问题。

+1

你能解释一下“应该是”这一栏吗?在这种情况下,为什么应该是19而不是18.5?你能否展示实现这一结果的步骤? – Juliano

+0

“应该”的结果是按照这里:http://www.trafficpolicemumbai.org/new_auto_tariff_card.pdf – Tvd

回答

1

我分析过工作表,但还没有找到给出结果的公式。似乎有些值有一些舍入差异。我意识到只有25或75美分的价值才是不同的。例如,你计算出18,5,它应该是19(结果是18,75,你舍入到18,5,但它应该四舍五入到19)。 因此,如果您没有用于创建表格的原始公式,我认为确保结果与工作表匹配的唯一方法是对其进行硬编码。这不是一个优雅的解决方案,但它保证了正确的结果。

0

在代码中的小调整做到了。你希望0.75取整为.5,而不是乘以2乘以它的直接较小的浮点数。

{ 
      double fare = 12.00; 
      double night = 15.00; 
      double subseIncre = 1.50; 
      double nightIncre = 0.25; 
      int j=0; 

      for (int i=1; i <= 22; i++) { 

       if (i == 3 || j == 4) { 
        fare += 1.00f; 
        j =0; 
       } 
       else { 
        fare += subseIncre; 
        j++; 
       } 

       double extra = ((double) fare * nightIncre); 
       night = fare + extra; 
       ; 

       System.out.println("I = " + i + " Fare = " + fare + " Night = " + night + " 25%Extra = " + extra); 
      } 
      System.out.println("actual Day = " + fare + " Night = " + night); 

      fare = Math.round(fare*1.99f)/2f; 
      night = Math.round(night*1.99f)/2f; 
      System.out.println("rounded Day = " + fare + " Night = " + night); 
    } 
+0

与上面的代码我得到很多数字错误哪些是来对。他们没有必要改变票价= Math.round,因为这是正确的。我添加了一个if(i> = 11 && i <= 22),即全部2.0到3.0,然后使用night * 2f/2f否则使用1.99f。随着这一变化,我在3.x中只有3个数字是错误的。我也使用这也用于xx.xx.想知道有多少如果我必须添加? – Tvd

+0

是的,我错过了与其他输入验证...你可能需要一个,如果在这种情况下...... – tsatiz