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)))
我目前正在为我的应用程序中的玩家编写积分系统。由于这些点可以很快变得非常大,我希望有一个系统可以将 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)))