在KotlinMultiplatform中有没有一种方法可以将浮点数格式化为小数位数?

rhfm7lfc  于 2023-02-05  发布在  Kotlin
关注(0)|答案(3)|浏览(161)

大多数答案使用Java(例如String.format)来完成工作,但我需要一种纯粹使用Kotlin来支持多平台编程的方法。
这意味着不使用java.*标准包。
比如说一个方法fun Float.toString(numOfDec:Int)。我希望对值进行舍入,例如:
35.229938f.toString(1)应返回35.2
35.899991f.toString(2)应返回35.90

tzdcorbm

tzdcorbm1#

我创建了下面的Float扩展(这也应该可以用于Double):

/**
 * Return the float receiver as a string display with numOfDec after the decimal (rounded)
 * (e.g. 35.72 with numOfDec = 1 will be 35.7, 35.78 with numOfDec = 2 will be 35.80)
 *
 * @param numOfDec number of decimal places to show (receiver is rounded to that number)
 * @return the String representation of the receiver up to numOfDec decimal places
 */
fun Float.toString(numOfDec: Int): String {
    val integerDigits = this.toInt()
    val floatDigits = ((this - integerDigits) * 10f.pow(numOfDec)).roundToInt()
    return "${integerDigits}.${floatDigits}"
}
kdfy810k

kdfy810k2#

在您的方案中使用此选项

try {
            if (!TextUtils.isDigitsOnly(st)) {
                val rounded = Math.round(st.toFloat())
                val toHex = BigInteger(rounded.toString(), 10)
                val t = toHex.toString(16)
                t.toString()
            } else {
                val toHex = BigInteger(st, 10)
                val t = toHex.toString(16)
                t.toString()
            }
        } catch (e: NumberFormatException) {
            error
        }
kiayqfof

kiayqfof3#

如果你想返回一个浮点数,但只想去掉小数点后的小数,那么就使用下面的代码:

fun Float.roundToDecimals(decimals: Int): Float {
    var dotAt = 1
    repeat(decimals) { dotAt *= 10 }
    val roundedValue = (this * dotAt).roundToInt()
    return (roundedValue / dotAt) + (roundedValue % dotAt).toFloat() / dotAt
}

相关问题