簡體   English   中英

格式化負十進制數,擴展名為 kotlin

[英]Format negative decimal number with extension kotlin

我有一個簡單的問題,但我沒有找到解決方案。 我有很大的負數 ex(-6763.98) 我想要的是這樣的 ex($-6.78K)。 A 發現了許多適用於正數的解決方案,但沒有一個適用於負數的解決方案。 這是我現在擁有的代碼。

const val COUNT_DIVISOR = 1000
       const val COUNT_DIVISOR_FLOAT = 1000.0
       fun getFormattedNumber(count: Long): String {
        if (count < COUNT_DIVISOR) return "" + count
        val exp = (ln(count.toDouble()) / ln(COUNT_DIVISOR_FLOAT)).toInt()
        return resources.getString(
            R.string.decimal_format_long_number_price,
            count / COUNT_DIVISOR_FLOAT.pow(exp.toDouble()), EXTENSION[exp - 1]
        )
    }
      

自然對數沒有為負值定義,因此 function ln將為負輸入返回NaN (不是數字)。

您必須確保輸入始終為正值才能正確計算指數。

val exp = (ln(abs(count.toDouble())) / ln(COUNT_DIVISOR_FLOAT)).toInt()

另一個問題是第一個if檢查,它為小於COUNT_DIVISOR的所有輸入返回輸入值本身。 您還必須允許大量的負輸入通過那里。

if (count > -COUNT_DIVISOR && count < COUNT_DIVISOR) return "" + count  

全部一起

const val COUNT_DIVISOR = 1000
const val COUNT_DIVISOR_FLOAT = 1000.0

fun getFormattedNumber(count: Long): String {
    if (count > -COUNT_DIVISOR && count < COUNT_DIVISOR) return "" + count
    val exp = (ln(abs(count.toDouble())) / ln(COUNT_DIVISOR_FLOAT)).toInt()
    return resources.getString(
        R.string.decimal_format_long_number_price,
        count / COUNT_DIVISOR_FLOAT.pow(exp.toDouble()), EXTENSION[exp - 1]
    )
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM