From bc33f40cb3989d6ac1a1d81d9f4cf0b89e831071 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 24 Feb 2025 00:07:20 -0500 Subject: Fix #1188 sign calculator floating point errors --- .../skyblock/calculators/SignCalculator.java | 26 +++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java b/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java index 265073bb..0b52fde5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java @@ -6,6 +6,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.jetbrains.annotations.VisibleForTesting; import java.text.NumberFormat; import java.util.Locale; @@ -26,21 +27,26 @@ public class SignCalculator { if (message.startsWith("=")) { message = message.substring(1); } - //only update output if new input - if (!message.equals(lastInput)) { // - try { - output = Calculator.calculate(message); - } catch (Exception e) { - output = -1; - } - } + calculate(message); render(context, message, renderX, renderY); lastInput = message; } - public static String getNewValue(Boolean isPrice) { + @VisibleForTesting + public static void calculate(String message) { + //only update output if new input + if (!message.equals(lastInput)) { + try { + output = Calculator.calculate(message); + } catch (Exception e) { + output = -1; + } + } + } + + public static String getNewValue(boolean isPrice) { if (output == -1) { //if mode is not activated or just invalid equation return what the user typed in return lastInput; @@ -48,7 +54,7 @@ public class SignCalculator { //price can except decimals and exponents if (isPrice) { - return String.valueOf(output); + return String.valueOf(Math.round(output * 100d) / 100d); } //amounts want an integer number so round return Long.toString(Math.round(output)); -- cgit