2012-05-08 144 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