Ограничить десятичные знаки в возврате?

Я новичок и пытаюсь придерживаться основных понятий здесь. Как ограничить количество десятичных знаков в ответе, полученном из возврата в другом классе? Я не знаю, как написать a.calculateTuition в формате цены 000,00. Я не смог найти хороший способ использовать класс DecimalFormat, а Math.round() недостаточно точен для цен. Заранее спасибо!

Из класса:

public double creditHours;
public double calculateTuition(){
    double totalCost=0;
    double costPerHour=124.04;
    totalCost = creditHours * costPerHour;

    return totalCost;
}

Из основного:

Student a=new Student();
a.setHours(3);
System.out.println("Cost is " +  a.calculateTuition());

person Nick Liedorff    schedule 26.01.2018    source источник
comment
Я всегда использую целые числа при расчете денежных сумм. Используйте центы, например, 100 означает 100 центов.   -  person JJF    schedule 27.01.2018
comment
@JJF Если вы действительно занимаетесь серьезными финансовыми делами, я настоятельно рекомендую использовать реальную структуру, разработанную для этого. По сути, деньги бесконечно делимы. Если я хочу заплатить вам полцента (например, цена на топливо), я могу это сделать.   -  person MechMK1    schedule 27.01.2018


Ответы (2)


Обычно считается лучшей практикой использовать BigDecimal с расчетами, связанными с валютой/деньгами, из-за точности, которую он предлагает.

Если вы решите использовать BigDecimal, у него также есть .setScale() и множество других полезных методов, которые могут оказаться полезными.

person KKaar    schedule 26.01.2018

Вы можете использовать следующую утилиту для округления нужного количества десятичных знаков:

long factor = (long) Math.pow(10, places);
value = value * factor;
long tmp = Math.round(value);
return (double) tmp / factor;
}
person purushotham nadipali    schedule 26.01.2018