From d6d15ebf2287b3e9d7c213241367ef053e971e60 Mon Sep 17 00:00:00 2001 From: Damyan Ivanov Date: Sun, 27 Sep 2020 20:09:14 +0300 Subject: [PATCH] add support for floatingPoint member of the quantity objects introduced in hledger-web to avoid problems with large mantissas and such when some prices are drived from transactions that result in periodic decimals --- .../json/v1_14/ParsedQuantity.java | 4 +- .../json/v1_15/ParsedQuantity.java | 44 ++++++------------- 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/net/ktnx/mobileledger/json/v1_14/ParsedQuantity.java b/app/src/main/java/net/ktnx/mobileledger/json/v1_14/ParsedQuantity.java index 5c27f6fb..2588054f 100644 --- a/app/src/main/java/net/ktnx/mobileledger/json/v1_14/ParsedQuantity.java +++ b/app/src/main/java/net/ktnx/mobileledger/json/v1_14/ParsedQuantity.java @@ -21,8 +21,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) public class ParsedQuantity { - private long decimalMantissa; - private int decimalPlaces; + protected long decimalMantissa; + protected int decimalPlaces; public ParsedQuantity() { } public ParsedQuantity(String input) { diff --git a/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedQuantity.java b/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedQuantity.java index f4096830..7ce1d12d 100644 --- a/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedQuantity.java +++ b/app/src/main/java/net/ktnx/mobileledger/json/v1_15/ParsedQuantity.java @@ -20,39 +20,21 @@ package net.ktnx.mobileledger.json.v1_15; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) -public class ParsedQuantity { - private long decimalMantissa; - private int decimalPlaces; - public ParsedQuantity() { - } - public ParsedQuantity(String input) { - parseString(input); - } - public long getDecimalMantissa() { - return decimalMantissa; - } - public void setDecimalMantissa(long decimalMantissa) { - this.decimalMantissa = decimalMantissa; - } - public int getDecimalPlaces() { - return decimalPlaces; - } - public void setDecimalPlaces(int decimalPlaces) { - this.decimalPlaces = decimalPlaces; +public class ParsedQuantity extends net.ktnx.mobileledger.json.v1_14.ParsedQuantity { + private float floatingPoint; + private boolean floatingPointSet = false; + public float getFloatingPoint() { + if (!floatingPointSet) + throw new IllegalStateException("floatingPoint is not set"); + return floatingPoint; + } + public void setFloatingPoint(float floatingPoint) { + this.floatingPoint = floatingPoint; + floatingPointSet = true; } public float asFloat() { + if (floatingPointSet) + return floatingPoint; return (float) (decimalMantissa * Math.pow(10, -decimalPlaces)); } - public void parseString(String input) { - int pointPos = input.indexOf('.'); - if (pointPos >= 0) { - String integral = input.replace(".", ""); - decimalMantissa = Long.parseLong(integral); - decimalPlaces = input.length() - pointPos - 1; - } - else { - decimalMantissa = Long.parseLong(input); - decimalPlaces = 0; - } - } } -- 2.39.2