From add5eb6a4a1c8228e789f90ca100fc92f12baaea Mon Sep 17 00:00:00 2001 From: nea Date: Fri, 2 Jun 2023 02:42:42 +0200 Subject: Improve floating point number formatting --- src/main/kotlin/moe/nea/firmament/commands/rome.kt | 22 +++++++++------------- .../nea/firmament/gui/profileviewer/SkillPage.kt | 3 ++- .../moe/nea/firmament/util/FirmFormatters.kt | 15 +++++++++++++++ .../resources/assets/firmament/lang/en_us.json | 8 ++++---- 4 files changed, 30 insertions(+), 18 deletions(-) create mode 100644 src/main/kotlin/moe/nea/firmament/util/FirmFormatters.kt diff --git a/src/main/kotlin/moe/nea/firmament/commands/rome.kt b/src/main/kotlin/moe/nea/firmament/commands/rome.kt index 2d70df0..9c47fd2 100644 --- a/src/main/kotlin/moe/nea/firmament/commands/rome.kt +++ b/src/main/kotlin/moe/nea/firmament/commands/rome.kt @@ -21,25 +21,16 @@ package moe.nea.firmament.commands import com.mojang.brigadier.CommandDispatcher import com.mojang.brigadier.arguments.StringArgumentType.getString import com.mojang.brigadier.arguments.StringArgumentType.string -import io.github.cottonmc.cotton.gui.client.CottonClientScreen -import io.ktor.client.call.body -import io.ktor.client.request.get -import io.ktor.client.request.parameter -import io.ktor.http.URLProtocol -import io.ktor.http.path import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource -import kotlinx.coroutines.launch import net.minecraft.text.Text -import moe.nea.firmament.Firmament -import moe.nea.firmament.apis.Profiles import moe.nea.firmament.features.world.FairySouls import moe.nea.firmament.gui.config.AllConfigsGui import moe.nea.firmament.gui.profileviewer.ProfileViewer import moe.nea.firmament.repo.ItemCostData import moe.nea.firmament.repo.RepoManager +import moe.nea.firmament.util.FirmFormatters import moe.nea.firmament.util.MC import moe.nea.firmament.util.SBData -import moe.nea.firmament.util.ScreenUtil import moe.nea.firmament.util.SkyblockId import moe.nea.firmament.util.unformattedString @@ -87,7 +78,7 @@ fun firmamentCommand() = literal("firmament") { source.sendFeedback( Text.translatable( "firmament.price.bazaar.buy.price", - bazaarData.quickStatus.buyPrice + FirmFormatters.toString(bazaarData.quickStatus.buyPrice, 1) ) ) source.sendFeedback( @@ -99,7 +90,7 @@ fun firmamentCommand() = literal("firmament") { source.sendFeedback( Text.translatable( "firmament.price.bazaar.sell.price", - bazaarData.quickStatus.sellPrice + FirmFormatters.toString(bazaarData.quickStatus.sellPrice, 1) ) ) source.sendFeedback( @@ -111,7 +102,12 @@ fun firmamentCommand() = literal("firmament") { } val lowestBin = ItemCostData.lowestBin[itemName] if (lowestBin != null) { - source.sendFeedback(Text.translatable("firmament.price.lowestbin", lowestBin)) + source.sendFeedback( + Text.translatable( + "firmament.price.lowestbin", + FirmFormatters.toString(lowestBin, 1) + ) + ) } } } diff --git a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt index d189b5b..88e477c 100644 --- a/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt +++ b/src/main/kotlin/moe/nea/firmament/gui/profileviewer/SkillPage.kt @@ -14,6 +14,7 @@ import net.minecraft.util.Formatting import moe.nea.firmament.apis.Skill import moe.nea.firmament.gui.WBar import moe.nea.firmament.repo.RepoManager +import moe.nea.firmament.util.FirmFormatters import moe.nea.firmament.util.toShedaniel object SkillPage : ProfilePage { @@ -45,7 +46,7 @@ object SkillPage : ProfilePage { ) { override fun addTooltip(tooltip: TooltipBuilder) { tooltip.add(Text.literal("$level/$maxLevel")) - tooltip.add(Text.translatable("firmament.pv.skills.total", exp)) + tooltip.add(Text.translatable("firmament.pv.skills.total", FirmFormatters.toString(exp, 1))) } }, 4, i + 1, 4, 1) } diff --git a/src/main/kotlin/moe/nea/firmament/util/FirmFormatters.kt b/src/main/kotlin/moe/nea/firmament/util/FirmFormatters.kt new file mode 100644 index 0000000..73ef121 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/util/FirmFormatters.kt @@ -0,0 +1,15 @@ +package moe.nea.firmament.util + +import com.google.common.math.IntMath.pow +import kotlin.math.absoluteValue + +object FirmFormatters { + fun toString(double: Double, fractionalDigits: Int): String { + val long = double.toLong() + val δ = (double - long).absoluteValue + val μ = pow(10, fractionalDigits) + val digits = (μ * δ).toInt().toString().padStart(fractionalDigits, '0').trimEnd('0') + return long.toString() + (if (digits.isEmpty()) "" else ".$digits") + } + +} diff --git a/src/main/resources/assets/firmament/lang/en_us.json b/src/main/resources/assets/firmament/lang/en_us.json index bd6c933..91bca24 100644 --- a/src/main/resources/assets/firmament/lang/en_us.json +++ b/src/main/resources/assets/firmament/lang/en_us.json @@ -6,11 +6,11 @@ "firmament.price": "Checking price for %s", "firmament.price.bazaar": "Bazaar stats:", "firmament.price.bazaar.productid": "Stock id: %s", - "firmament.price.bazaar.buy.price": "Buy Price: %.1f", + "firmament.price.bazaar.buy.price": "Buy Price: %s", "firmament.price.bazaar.buy.order": "Buy orders: %d", - "firmament.price.bazaar.sell.price": "Sell Price: %.1f", + "firmament.price.bazaar.sell.price": "Sell Price: %s", "firmament.price.bazaar.sell.order": "Sell orders: %d", - "firmament.price.lowestbin": "Lowest BIN: %.1f", + "firmament.price.lowestbin": "Lowest BIN: %s", "firmament.repo.reload.network": "Trying to redownload the repository", "firmament.repo.reload.disk": "Reloading repository from disk. This may lag a bit.", "firmament.repo.cache": "Recaching items", @@ -53,6 +53,6 @@ "firmament.pv.skills.combat": "Combat", "firmament.pv.skills.social": "Social", "firmament.pv.skills.enchanting": "Enchanting", - "firmament.pv.skills.total": "Total Exp: %.1f", + "firmament.pv.skills.total": "Total Exp: %s", "firmament.pv.lookingup": "Looking up %s" } -- cgit