实施单位转换

时间:2012-05-08 16:07:37

标签: java logic

我正在开发一个功能,我计算的仪表单位数量。仪表计算规则如下:

  • 最低票价1.6km 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是km的指数。仪表读数分别为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并且结果不正确被宣布为不应该与白天或夜晚相关。

我在这方面做了很多工作,但无法按预期获得结果。如果我试图纠正1件事,那么其他人会出错或者没有给出预期的结果。任何人都可以帮我解决这个问题。几乎整天都在努力解决这个问题。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

代码中的小调整就行了。你想要0.75一轮为.5而不是乘以它乘以它的直接较小的浮点数。

{
            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);
    }