如何在 Kotlin 中减少来自 API 的传入多位十进制数的位数?

How do I reduce the digits of an incoming multi-digit decimal number from API in Kotlin?

我从 API 中获取价格值,但它是一个多位数的十进制数,例如 0.4785835398457。我想将此数字减少到 3 或 4 位数字,如 0.3234,我在 TextView 中显示该值。所以首先,我必须形成这个值,其次我需要将它转换为字符串。我在 RecyclerAdapter 的 onBindViewHolder 部分尝试了 DecimalFormat 方法。

override fun onBindViewHolder(holder: CoinListViewHolder, position: Int) {
    val df = DecimalFormat("#.###")
    df.roundingMode= RoundingMode.CEILING  //<-----Here 
    df.format(coinList[position].price_usd.also { holder.itemView.coinPrice.text = it.toString() }) // <----- And here
    holder.itemView.coinTicker.text= coinList[position].asset_id
    

    holder.itemView.setOnClickListener {
            listener.onItemClick(coinList, position)
    }

但是没有用。请帮我。 提前致谢。

您可以只使用一个字符串格式化程序,它使用您想要的小数位数:

val number = 123.12345
"%.3f".format(number).run(::println)

>> 123.123

这基本上是将浮点值 (f) 转换为字符串,转换为三位有效数字 (.3)。格式规范是 here,但有点复杂。


就您的代码而言,这:

df.format(coinList[position].price_usd.also { holder.itemView.coinPrice.text = it.toString() })

相当于:

val price = coinList[position].price_usd
holder.itemView.coinPrice.text = price.toString()
df.format(price)

我假设你想格式化价格然后然后TextView中显示它(现在你只是格式化它而不对结果),这将是这样的:

df.format(coinList[position].price_usd)
    .let { holder.itemView.coinPrice.text = it.toString() }

即做格式,然后用结果

this

尝试holder.itemView.coinPrice.text = df.format(coinList[position].price_usd)