-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMonetaryValue.java
More file actions
87 lines (70 loc) · 2.64 KB
/
MonetaryValue.java
File metadata and controls
87 lines (70 loc) · 2.64 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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
public class MonetaryValue {
private final int totalCents;
public static final MonetaryValue ZERO = ofCents(0),
ONE_CENT = ofCents(1),
ONE_DOLLAR = ofDollars(1);
private MonetaryValue(int totalCents) {
this.totalCents = totalCents;
}
public static MonetaryValue ofCents(int cents) {
return new MonetaryValue(cents);
}
public static MonetaryValue ofDollars(int dollars) {
return new MonetaryValue(dollars * 100);
}
public static MonetaryValue ofDollarsAndCents(int dollars, int cents) {
return new MonetaryValue(dollars * 100 + cents);
}
// examples of monetaryString:
// 10, 10.34, -10, -10.34, $10, $10.34, $-10, $-10.34
public MonetaryValue(String monetaryString) {
if (monetaryString.startsWith("$")) {
monetaryString = monetaryString.substring(1); // disregard first character
}
boolean isNegative = false;
if (monetaryString.startsWith("-")) {
isNegative = true;
monetaryString = monetaryString.substring(1); // disregard the - character
}
int indexOfPoint = monetaryString.indexOf('.');
if (indexOfPoint == -1) { // there is no decimal point
totalCents = (isNegative ? -1 : 1) * Integer.parseInt(monetaryString) * 100;
} else {
String dollarsString = monetaryString.substring(0, indexOfPoint);
String centsString = monetaryString.substring(indexOfPoint + 1);
totalCents = (isNegative ? -1 : 1)
* (Integer.parseInt(dollarsString) * 100 + Integer.parseInt(centsString));
}
}
public int getTotalCents() {
return totalCents;
}
// totalCents: 1023 --> 10.23
public double toDouble() {
return totalCents / 100.0;
}
public String toString() {
return String.format("$%.2f", toDouble());
}
public boolean isNegative() {
return totalCents < 0; // or: this.isLessThan(ZERO)
}
public boolean isPositive() {
return totalCents > 0;
}
public boolean isGreaterThan(MonetaryValue other) {
return this.totalCents > other.totalCents;
}
public boolean isLessThan(MonetaryValue other) {
return this.totalCents < other.totalCents;
}
public boolean isEqualTo(MonetaryValue other) {
return this.totalCents == other.totalCents;
}
public MonetaryValue plus(MonetaryValue other) {
return new MonetaryValue(this.totalCents + other.totalCents);
}
public MonetaryValue minus(MonetaryValue other) {
return new MonetaryValue(this.totalCents - other.totalCents);
}
}