Java 实现单元转换

Java 实现单元转换,java,logic,Java,Logic,我正在处理一个函数,在这个函数中,我计算仪表单位的数量。电表计算规则如下: 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.2

我正在处理一个函数,在这个函数中,我计算仪表单位的数量。电表计算规则如下:

  • 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);
}   
publicstaticvoidcalculateAutofare(int-kmIndex){
双倍票价=12.00;
双晚=15.00;
双次增量=1.50;
双倍夜间增量=0.25;
int j=0;

对于(inti=1;i代码中的小调整就可以了。你想要的是.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);
    }
{
双倍票价=12.00;
双晚=15.00;
双次增量=1.50;
双倍夜间增量=0.25;
int j=0;

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

您能解释一下“应该”列吗.在第一个例子中,为什么应该是19而不是18.5?你能展示一下实现这个结果的步骤吗?应该的结果如下:“应该”的结果如下:根据上面的代码,我得到了许多正确的数字。他们不需要更改fare=Math.round,因为这是正确的。我添加了一个if(i>=11&&i是的,我没有用其他输入进行验证…在这种情况下,您可能需要if。。。