0

メートル単位を計算する関数に取り組んでいます。メーター計算のルールは次のとおりです。

  • 1.6kmamtの最低運賃-12/-
  • 後続の1kmamt-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 ...です。したがって、1.00 = 0、1.10 = 1、1.20-3などのkmIndexです。

私がコードに従って取得し、言及されるべき結果は以下に記載されています:

ここに画像の説明を入力してください

私は4.00まで働いており、結果が正しくない場合は、昼夜を問わず関連性があると宣言されています。

私はこれに多くの努力をしましたが、期待通りの結果を得ることができませんでした。1つのことを修正しようとすると、他のことは間違っているか、期待した結果が得られません。誰かがこれで私を助けることができますか?これを解決するためにほぼ一日を費やしました。

4

2 に答える 2

1

ワークシートを分析しましたが、そこに示されている結果を与える式が見つかりませんでした。一部の値には丸めの違いがあるようです。25 セントまたは 75 セントの値だけが異なることに気付きました。たとえば、18.5 を計算すると、19 になるはずです (結果は 18.75 で、18.5 に切り捨てましたが、19 に切り上げる必要があります)。したがって、テーブルの作成に使用された元の数式がない場合、結果がワークシートと一致することを確認する唯一の方法は、それをハードコーディングすることだと思います。これは洗練されたソリューションではありませんが、正しい結果が保証されます。

于 2012-05-10T02:21:54.863 に答える
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);
    }
于 2012-05-08T17:12:26.223 に答える