Java/Kotlin 将数字转换为更好的字符串表示法("aa" 表示法)

Java/Kotlin convert numbers into a better string representation ("aa" notation)

我目前正在为我的应用程序中的玩家编写积分系统。由于这些点可以很快变得非常大,我希望有一个系统可以将 BigInteger 转换为更好的表示形式(见下文)。

示例:

1000 -> 1k
5555555 -> 5.55m
1000000000000000000 -> 1ab

单位:k、m、b、t、aa、ab、ac ...

我真的还没有任何东西,因为我不知道从哪里开始。 我找到了 this,但它是在 C# 中,我真的不知道如何将它转换成 java/kotlin。

也许有人可以给我一个入口点,或者只是一个代码片段? :D

抱歉英语不好

这显然不是解决方案,而只是将代码转换为 gram 的快速尝试。gs/gramlog/formatting-big-numbers-aa-notation 到 Kotlin:

import java.text.DecimalFormat
import kotlin.math.floor
import kotlin.math.log
import kotlin.math.pow

fun formatNumber(value: Double): String {

  val charA = 'a'.code

  val units = mapOf(
    0 to "",
    1 to "K",
    2 to "M",
    3 to "B",
    4 to "T"
  )

  if (value < 1.0) {
    return "0"
  }

  val n = log(value, 1000.0).toInt()
  val m = value / 1000.0.pow(n)
  
  var unit = "";

  if (n < units.count()) {
    unit = units[n]!!
  } else {
    val unitInt = n - units.count()
    val secondUnit = unitInt % 26
    val firstUnit = unitInt / 26
    unit = (firstUnit + charA).toChar().toString() + (secondUnit + charA).toChar().toString()
  }

  return DecimalFormat("#.##").format(floor(m * 100) / 100) + unit

}

println((formatNumber(1.0)))
println((formatNumber(1_000.0)))
println((formatNumber(1_000_000.0)))
println((formatNumber(1_000_000_000.0)))
println((formatNumber(1_000_000_000_000.0)))
println((formatNumber(1_000_000_000_000_000.0)))
println((formatNumber(1_000_000_000_000_000_000.0)))