forked from Yandex-Practicum/Java-Module-Project-YP
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBillCalc.java
More file actions
57 lines (49 loc) · 2.38 KB
/
BillCalc.java
File metadata and controls
57 lines (49 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
public class BillCalc {
private final List<String> items;
private BigDecimal totalCost;
private BigDecimal totalCostPerPerson;
private final BigDecimal persons;
public BillCalc(int persons) {
this.items = new ArrayList<>();
this.totalCost = BigDecimal.valueOf(0.00);
this.totalCostPerPerson = BigDecimal.valueOf(0.00);
this.persons = BigDecimal.valueOf(persons);
}
public void addItem(String itemName, String price) {
BigDecimal itemPrice = new BigDecimal(price.trim()).setScale(2, RoundingMode.HALF_UP);
String item = itemName + ", " + itemPrice;
items.add(item);
totalCost = totalCost.add(itemPrice);
totalCostPerPerson = totalCost.divide(persons, RoundingMode.HALF_UP);
}
public void printTotal() {
System.out.println("Количество посетителей: " + persons.setScale(0, RoundingMode.DOWN));
System.out.println("Общая сумма счета: " + totalEnding(totalCost));
System.out.println("Каждый посетитель должен заплатить: " + totalEnding(totalCostPerPerson));
System.out.println("\nВсе позиции меню: ");
for (int i = 0; i < items.size(); i++) {
String name = items.get(i).split(",")[0];
BigDecimal price = new BigDecimal(items.get(i).split(", ")[1]);
System.out.println((i+1) + ". " + name + " - " + totalEnding(price));
}
}
private String totalEnding(BigDecimal val) {
double rub = val.setScale(0, RoundingMode.DOWN).doubleValue();
double kop = val.multiply(BigDecimal.valueOf(100)).setScale(0, RoundingMode.DOWN).doubleValue() % 100;
String endRub;
if (rub % 100 > 10 && rub % 100 < 15) endRub = "рублей";
else if (rub % 10 > 1 && rub % 10 < 5) endRub = "рубля";
else if (rub % 10 == 1) endRub = "рубль";
else endRub = "рублей";
String endKop;
if (kop > 10 && kop < 15) endKop = "копеек";
else if (kop % 10 > 1 && kop % 10 < 5) endKop = "копейки";
else if (kop % 10 == 1) endKop = "копейка";
else endKop = "копеек";
return String.format("%.0f %s %.0f %s", rub, endRub, kop, endKop);
}
}