Калькулятор стоимости доставки на Java, выдает неправильные цифры

Я новичок в Java, и мы делаем калькулятор стоимости доставки на основе разных весов и расстояний. Мы практикуем операторы if-else, но я столкнулся с проблемой, которую не могу понять. Когда я вычисляю разные веса и расстояния, я получаю неправильные ответы. Я думаю, что это как-то связано с моей математикой, когда я не могу заставить программу добавить следующую плату за расстояние, потому что она не использует остаток. Пожалуйста, помогите мне понять это.

public class ShippingCharges {

private double weight;
private double miles;


public ShippingCharges (double w, double m)
{
    weight = w;
    miles = m;
}


public double getShippingCharges()
{
    double charges;
    if (weight <= 2.0)
    { charges = (1.10 * miles / 500);
    }
    else if ((weight > 2.0) && (weight <= 6.0))
    {
        charges = (2.20 * (miles  / 500 ));
    }
    else if ((weight > 6.0) && (weight <=10.0))
    {
        charges = (3.70 * (miles / 500 )); 
    }
    else 
    {
        charges = (4.80 * miles  / 500);
    }
    return charges;

    }
}

person Community    schedule 17.03.2013    source источник
comment
Чего вы ожидаете и что получаете? Где вы его используете?   -  person BobTheBuilder    schedule 18.03.2013
comment
Можете ли вы привести пример ожидаемого результата и что вы получите вместо этого?   -  person Cyrille Ka    schedule 18.03.2013
comment
Хорошо, вот так, на каждые 500 миль должно прибавляться, скажем, 2,20. Кажется, что если мили составляют, скажем, 750, кажется, что он вычисляет только первые 500 и не добавляет дополнительные 2,20, потому что это более 500 миль.   -  person    schedule 18.03.2013
comment
Может быть проблема с двойной точностью - вы действительно должны использовать BigDecimal для денег.   -  person Boris the Spider    schedule 18.03.2013
comment
Хорошо, это так. Если я ввожу вес 9,5 и 750 миль, мой результат составляет 5,55. Но должно быть 7.40. Стоимость доставки за 500 миль не пропорциональна. Пакет весом 2 фунта по цене 550 будет стоить 2,20.   -  person    schedule 18.03.2013


Ответы (1)


Из того, что вы сказали, я понимаю, что проблема в том, что вы не округляете результат миль / 500, попробуйте следующее:

public double getShippingCharges()
{
    double charges;
    if (weight <= 2.0)
    { charges = (1.10 * Math.ceil(miles / 500));
    }
    else if ((weight > 2.0) && (weight <= 6.0))
    {
        charges = (2.20 * Math.ceil(miles  / 500 ));
    }
    else if ((weight > 6.0) && (weight <=10.0))
    {
        charges = (3.70 * Math.ceil(miles / 500 )); 
    }
    else 
    {
        charges = (4.80 * Math.ceil(miles  / 500));
    }
    return charges;

    }
person 0x6C38    schedule 17.03.2013
comment
Я попробовал этот код, и он сработал на 9,5 фунтах на 750 милях, но пакет на 2 фунта на 550 милях стоит 2,00 вместо 2,20. Я раньше не видел Math.ceil. Не могли бы вы объяснить, что это такое, чтобы я знал для будущего использования. Спасибо - person ; 18.03.2013
comment
Он округляет значение. Вы уверены, что это не 2.2? Так должно быть. Может быть, вы скопировали код до того, как я отредактировал скобки - person 0x6C38; 18.03.2013
comment
Да, я думаю, что сделал. Большое спасибо, я собирался попробовать использовать модуль, но я тоже мало что знаю о них. Спасибо за вашу помощь!!! - person ; 18.03.2013