Updated on 2026-08-14
This commit is contained in:
parent
a107f9299d
commit
13f139afa8
3 changed files with 63 additions and 2 deletions
|
|
@ -232,7 +232,7 @@ private fun BigDecimal.isLessThanThreshold() = this > BigDecimal.ZERO && this <
|
|||
* Returns amount with correct scale
|
||||
*/
|
||||
fun getFiatPriceAmountWithScale(value: BigDecimal): Pair<BigDecimal, Int> {
|
||||
return if (value < BigDecimal.ONE) {
|
||||
return if (value > BigDecimal.ZERO && value < BigDecimal.ONE) {
|
||||
val leadingZeroes = value.scale() - value.precision()
|
||||
val scale = leadingZeroes + FRACTIONAL_PART_LENGTH_AFTER_LEADING_ZEROES
|
||||
|
||||
|
|
|
|||
|
|
@ -294,4 +294,52 @@ internal class BigDecimalFiatFormatTest {
|
|||
Truth.assertThat(formatted)
|
||||
.isEqualTo("0.00000000000000000000123".addUsdSymbolLeft())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `price zero is formatted with default precision and does not crash`() {
|
||||
val testValue = BigDecimal.ZERO
|
||||
|
||||
val formatted = testValue.format {
|
||||
fiat(
|
||||
fiatCurrencyCode = usdCurrencyCode,
|
||||
fiatCurrencySymbol = usdSymbol,
|
||||
locale = testLocale,
|
||||
).price()
|
||||
}
|
||||
|
||||
Truth.assertThat(formatted)
|
||||
.isEqualTo("0.00".addUsdSymbolLeft())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `price negative integer keeps sign and does not crash`() {
|
||||
val testValue = BigDecimal("-500")
|
||||
|
||||
val formatted = testValue.format {
|
||||
fiat(
|
||||
fiatCurrencyCode = usdCurrencyCode,
|
||||
fiatCurrencySymbol = usdSymbol,
|
||||
locale = testLocale,
|
||||
).price()
|
||||
}
|
||||
|
||||
Truth.assertThat(formatted)
|
||||
.isEqualTo("-" + "500.00".addUsdSymbolLeft())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `price negative fractional keeps sign and does not crash`() {
|
||||
val testValue = BigDecimal("-0.5")
|
||||
|
||||
val formatted = testValue.format {
|
||||
fiat(
|
||||
fiatCurrencyCode = usdCurrencyCode,
|
||||
fiatCurrencySymbol = usdSymbol,
|
||||
locale = testLocale,
|
||||
).price()
|
||||
}
|
||||
|
||||
Truth.assertThat(formatted)
|
||||
.isEqualTo("-" + "0.50".addUsdSymbolLeft())
|
||||
}
|
||||
}
|
||||
|
|
@ -15,6 +15,7 @@ import com.tangem.domain.markets.TokenMarket
|
|||
import com.tangem.features.feed.impl.R
|
||||
import com.tangem.features.feed.model.market.list.state.MarketsListUM
|
||||
import com.tangem.utils.converter.Converter
|
||||
import com.tangem.utils.logging.TangemLogger
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import java.math.BigDecimal
|
||||
import java.math.RoundingMode
|
||||
|
|
@ -92,7 +93,15 @@ internal class MarketsTokenItemConverter(
|
|||
private fun TokenMarket.getCurrentPrice(prev: TokenMarket? = null): MarketsListItemUM.Price {
|
||||
val prevPrice = prev?.tokenQuotesShort?.currentPrice
|
||||
|
||||
val priceText = tokenQuotesShort.currentPrice.format {
|
||||
val currentPrice = tokenQuotesShort.currentPrice
|
||||
if (currentPrice < BigDecimal.ZERO) {
|
||||
TangemLogger.withTag(MARKETS_PRICE_LOG_TAG).w(
|
||||
messageString = "Unexpected non-positive price for tokenId=$id, symbol=$symbol, " +
|
||||
"currency=${appCurrency.code}, value=${currentPrice.toPlainString()}",
|
||||
)
|
||||
}
|
||||
|
||||
val priceText = currentPrice.format {
|
||||
fiat(
|
||||
fiatCurrencyCode = appCurrency.code,
|
||||
fiatCurrencySymbol = appCurrency.symbol,
|
||||
|
|
@ -162,4 +171,8 @@ internal class MarketsTokenItemConverter(
|
|||
|
||||
return percent.format { percent() }
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val MARKETS_PRICE_LOG_TAG = "MarketsTokenItemConverter"
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue