繁体   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