From e6170089300592cb0db64fc3d480a26bc9bad13a Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 31 Oct 2020 11:42:53 -0300 Subject: [PATCH] fix rounding and precision ugliness, fixes #516 --- src/main/java/carpet/script/value/NumericValue.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/carpet/script/value/NumericValue.java b/src/main/java/carpet/script/value/NumericValue.java index a93dfa3d..c173b59f 100644 --- a/src/main/java/carpet/script/value/NumericValue.java +++ b/src/main/java/carpet/script/value/NumericValue.java @@ -10,15 +10,17 @@ import net.minecraft.nbt.Tag; import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; +import java.math.MathContext; +import java.math.RoundingMode; import java.util.Locale; import static java.lang.Math.abs; public class NumericValue extends Value { - private Double value; + private final Double value; private Long longValue; - final static double epsilon = 1024*Double.MIN_VALUE; + final static double epsilon = 32*((7*0.1)*10-7); public static NumericValue asNumber(Value v1, String id) { @@ -46,7 +48,8 @@ public class NumericValue extends Value { if (value.isInfinite()) return "INFINITY"; if (value.isNaN()) return "NaN"; - return BigDecimal.valueOf(value).stripTrailingZeros().toPlainString(); + // dobules have 16 point precision, 12 is plenty to display + return BigDecimal.valueOf(value).round(new MathContext(12, RoundingMode.HALF_EVEN)).stripTrailingZeros().toPlainString(); } catch (NumberFormatException exc) {