如何在 Kotlin 中删除小数点末尾的多余零?

齐特隆

我正在创建一个函数,该函数将大于 1,000 的大数舍入,然后返回该舍入数字的字符串。例如,“2374293”将返回为“2.37m”
但是,我不希望小数点末尾有任何额外的零,如“25.00”或“100.50”。

例如:

我想要的是:

 Input  ->  Output

"11000" -> "11k"
"11400" -> "11.4k"

我得到什么:

 Input  ->  Output

"11000" -> "11.00k"
"11400" -> "11.40k"

需要时如何删除这些零和小数点(如果是整数)?

这是我目前的代码:

    private fun roundBigNumb(numb: Long): String {
    val newNumb = numb.toDouble()
    return when {
        numb in 1000..999994 -> {
            BigDecimal(newNumb/1000).setScale(2, RoundingMode.HALF_EVEN).toString()+"k"
        }
        numb in 999995..999999 -> {
            "999.99k"
        }
        numb in 1000000..999994999 -> {
            BigDecimal(newNumb/1000000).setScale(2, RoundingMode.HALF_EVEN).toString()+"m"
        }

        numb in 999995000..999999999 -> {
            "999.99m"
        }

        numb in 1000000000..999994999999 -> {
            BigDecimal(newNumb/1000000000).setScale(2, RoundingMode.HALF_EVEN).toString()+"b"
        }

        numb in 999995000000..999999999999 -> {                    
            "999.99b"
        }

        numb in 1000000000000..999994999999999 -> {
            BigDecimal(newNumb/1000000000000).setScale(2, RoundingMode.HALF_EVEN).toString()+"t"
        }

        numb in 999995000000000..999999999999999 -> {
            "999.99t"
        }

        numb >= 1000000000000000 -> "∞"

        else -> numb.toString()
    }
}
泰勒五世

将数字转换为最多具有 2 个小数位的字符串后(正如您所做的那样),您可以使用dropLastWhile删除尾随零和小数位。

这是一个例子

fun prettyFormat(input: Double): String {
    if( input == 0.0 ) return "0"
    
    val prefix = if( input < 0 ) "-" else ""
    val num = abs(input)

    // figure out what group of suffixes we are in and scale the number
    val pow = floor(log10(num)/3).roundToInt()
    val base = num / 10.0.pow(pow * 3)

    // Using consistent rounding behavior, always rounding down since you want
    // 999999999 to show as 999.99M and not 1B
    val roundedDown = floor(base*100)/100.0

    // Convert the number to a string with up to 2 decimal places
    var baseStr = BigDecimal(roundedDown).setScale(2, RoundingMode.HALF_EVEN).toString()

    // Drop trailing zeros, then drop any trailing '.' if present
    baseStr = baseStr.dropLastWhile { it == '0' }.dropLastWhile { it == '.' }

    val suffixes = listOf("","k","M","B","T")

    return when {
        pow < suffixes.size -> "$prefix$baseStr${suffixes[pow]}"
        else -> "${prefix}infty"
    }
}

这产生

11411.0   = 11.41k
11000.0   = 11k
9.99996E8 = 999.99M
12.4      = 12.4
0.0       = 0
-11400.0  = -11.4k

如果您不关心零或负数,可以稍微简化一下。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章