changed handling of percentage parsing
This commit is contained in:
parent
8bf68f5d66
commit
22a15c3bb9
|
@ -2,6 +2,7 @@ package me.teridax.jcash.banking.management;
|
||||||
|
|
||||||
import me.teridax.jcash.banking.Bank;
|
import me.teridax.jcash.banking.Bank;
|
||||||
import me.teridax.jcash.banking.accounts.Account;
|
import me.teridax.jcash.banking.accounts.Account;
|
||||||
|
import me.teridax.jcash.banking.accounts.CurrentAccount;
|
||||||
import me.teridax.jcash.banking.accounts.Owner;
|
import me.teridax.jcash.banking.accounts.Owner;
|
||||||
import me.teridax.jcash.decode.StringDecoder;
|
import me.teridax.jcash.decode.StringDecoder;
|
||||||
|
|
||||||
|
|
|
@ -37,12 +37,23 @@ public class StringDecoder {
|
||||||
Objects.requireNonNull(number);
|
Objects.requireNonNull(number);
|
||||||
|
|
||||||
// trim the number and cut out optional percent symbols
|
// trim the number and cut out optional percent symbols
|
||||||
var trimmed = number.trim().replace("%", "");
|
var trimmed = number.trim();
|
||||||
|
|
||||||
try {
|
var pattern = Pattern.compile("^([^%]+)?(%)?$", Pattern.CASE_INSENSITIVE);
|
||||||
return LOCAL_NUMBER_FORMAT.parse(trimmed).doubleValue();
|
var matcher = pattern.matcher(trimmed);
|
||||||
} catch (ParseException ex) {
|
if (matcher.find()) {
|
||||||
throw new IllegalArgumentException("Not a valid number: " + number, ex);
|
var scale = 1e2;
|
||||||
|
|
||||||
|
if (null != matcher.group(2))
|
||||||
|
scale = 1;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return LOCAL_NUMBER_FORMAT.parse(matcher.group(1)).doubleValue() * scale;
|
||||||
|
} catch (ParseException ex) {
|
||||||
|
throw new IllegalArgumentException("Not a valid number: " + number, ex);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("not a valid percentage");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,6 +149,8 @@ public class StringDecoder {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDecodeSuccessfulFunctions() {
|
public void testDecodeSuccessfulFunctions() {
|
||||||
|
assertEquals(decodePercent("1,003"), 100.3d, 1e-3d);
|
||||||
|
|
||||||
decodeUniqueIdentificationNumber("9578647895");
|
decodeUniqueIdentificationNumber("9578647895");
|
||||||
decodeUniqueIdentificationNumber(" 927856347 ");
|
decodeUniqueIdentificationNumber(" 927856347 ");
|
||||||
decodeUniqueIdentificationNumber("0");
|
decodeUniqueIdentificationNumber("0");
|
||||||
|
@ -150,9 +163,9 @@ public class StringDecoder {
|
||||||
decodeStreet("Gülleweg 9");
|
decodeStreet("Gülleweg 9");
|
||||||
decodeStreet("Echsengaße 67 / 4");
|
decodeStreet("Echsengaße 67 / 4");
|
||||||
|
|
||||||
assertEquals(decodePercent("1,4%"), 1.4d);
|
assertEquals(decodePercent("1,4%"), 1.4, 1e-3d);
|
||||||
assertEquals(decodePercent("99"), 99.0d);
|
assertEquals(decodePercent("99"), 9900.0d);
|
||||||
assertEquals(decodePercent("1,003 %"), 1.003d);
|
assertEquals(decodePercent("1,003%"), 1.003, 1e-5d);
|
||||||
|
|
||||||
assertEquals(decodeCurrency("1,3€"), 1.3d);
|
assertEquals(decodeCurrency("1,3€"), 1.3d);
|
||||||
assertEquals(decodeCurrency("145,34"), 145,34d);
|
assertEquals(decodeCurrency("145,34"), 145,34d);
|
||||||
|
|
Loading…
Reference in New Issue