From f0e5648ad9cbc686956f2b9be60d0f6bdfad0b04 Mon Sep 17 00:00:00 2001 From: Piotr Stachyra Date: Fri, 14 Nov 2025 11:13:00 +0100 Subject: [PATCH 1/2] show 0 balance with decimals in classic denomination --- app/src/main/java/to/bitkit/models/Currency.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/to/bitkit/models/Currency.kt b/app/src/main/java/to/bitkit/models/Currency.kt index 937d8491bf..ebef4fd36a 100644 --- a/app/src/main/java/to/bitkit/models/Currency.kt +++ b/app/src/main/java/to/bitkit/models/Currency.kt @@ -106,12 +106,16 @@ fun Long.formatToModernDisplay(locale: Locale = Locale.getDefault()): String { fun ULong.formatToModernDisplay(locale: Locale = Locale.getDefault()): String = toLong().formatToModernDisplay(locale) fun Long.formatToClassicDisplay(locale: Locale = Locale.getDefault()): String { - val sats = this val symbols = DecimalFormatSymbols(locale).apply { decimalSeparator = DECIMAL_SEPARATOR } - val formatter = DecimalFormat("###.########", symbols) - return formatter.format(sats.asBtc()) + val pattern = "0.${"0".repeat(CLASSIC_DECIMALS)}" + val formatter = DecimalFormat(pattern, symbols).apply { + minimumFractionDigits = CLASSIC_DECIMALS + maximumFractionDigits = CLASSIC_DECIMALS + isGroupingUsed = false + } + return formatter.format(asBtc()) } fun BigDecimal.formatCurrency(decimalPlaces: Int = FIAT_DECIMALS, locale: Locale = Locale.getDefault()): String? { From 3e7b5f63ef11c9d329f7378f43c2ba1b90afc128 Mon Sep 17 00:00:00 2001 From: Piotr Stachyra Date: Fri, 14 Nov 2025 12:01:53 +0100 Subject: [PATCH 2/2] basic unit tests for formatToModernDisplay and formatToClassicDisplay --- .../java/to/bitkit/models/CurrencyTest.kt | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 app/src/test/java/to/bitkit/models/CurrencyTest.kt diff --git a/app/src/test/java/to/bitkit/models/CurrencyTest.kt b/app/src/test/java/to/bitkit/models/CurrencyTest.kt new file mode 100644 index 0000000000..7b9ad33240 --- /dev/null +++ b/app/src/test/java/to/bitkit/models/CurrencyTest.kt @@ -0,0 +1,40 @@ +package to.bitkit.models + +import org.junit.Assert.assertEquals +import org.junit.Test +import java.util.Locale + +class CurrencyTest { + + @Test + fun `formatToModernDisplay uses space grouping`() { + val sats = 123_456_789L + + val formatted = sats.formatToModernDisplay(Locale.US) + + assertEquals("123 456 789", formatted) + } + + @Test + fun `formatToModernDisplay handles zero`() { + val formatted = 0L.formatToModernDisplay(Locale.US) + + assertEquals("0", formatted) + } + + @Test + fun `formatToClassicDisplay always shows eight decimals`() { + val formatted = 0L.formatToClassicDisplay(Locale.US) + + assertEquals("0.00000000", formatted) + } + + @Test + fun `formatToClassicDisplay converts sats to btc`() { + val sats = 12_345L // 0.00012345 BTC + + val formatted = sats.formatToClassicDisplay(Locale.US) + + assertEquals("0.00012345", formatted) + } +}