1 package io.jawk.jrt;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import java.math.BigDecimal;
26
27 final class StrNum {
28
29 private final String value;
30 private final char decimalSeparator;
31 private Boolean numeric;
32 private Double numericValue;
33
34 StrNum(String value) {
35 this(value, '.');
36 }
37
38 StrNum(String value, char decimalSeparator) {
39 this.value = value == null ? "" : value;
40 this.decimalSeparator = decimalSeparator;
41 }
42
43 boolean isNumber() {
44 if (numeric == null) {
45 numeric = Boolean.valueOf(JRT.isParseableNumber(value, decimalSeparator));
46 }
47 return numeric.booleanValue();
48 }
49
50 double doubleValue() {
51 if (numericValue == null) {
52 numericValue = Double.valueOf(parseDoubleValue());
53 }
54 return numericValue.doubleValue();
55 }
56
57 private double parseDoubleValue() {
58 String normalizedValue = JRT.normalizeNumberForComparison(value, decimalSeparator);
59 try {
60 return Double.parseDouble(normalizedValue);
61 } catch (NumberFormatException nfe) {
62 return new BigDecimal(normalizedValue).doubleValue();
63 }
64 }
65
66 @Override
67 public String toString() {
68 return value;
69 }
70 }