如何在Kotlin Multiplatform中不使用外部库对数值取整?
KMP跨平台实现Double指定小数位取整
直接基于Kotlin标准库实现跨平台的Double取整逻辑,无需针对各平台单独编码,核心思路是通过10的幂次缩放数值后进行四舍五入,再还原回去:
fun Double.roundToDecimalPlaces(decimalPlaces: Int): Double { require(decimalPlaces >= 0) { "小数位数不能为负数" } val multiplier = 10.0.pow(decimalPlaces) return (this * multiplier).roundToInt().toDouble() / multiplier }
实现说明
- 参数校验:确保传入的小数位是非负整数,避免非法输入
- 缩放逻辑:通过
10.0.pow(decimalPlaces)计算缩放倍数,比如保留2位小数时倍数为100.0 - 四舍五入:将原数乘以倍数后调用
roundToInt()完成四舍五入,再转回Double并除以倍数还原数值
使用示例
val num1 = 3.14159.roundToDecimalPlaces(2) // 结果为3.14 val num2 = 2.71828.roundToDecimalPlaces(3) // 结果为2.718 val num3 = 5.5.roundToDecimalPlaces(0) // 结果为6.0
这个方案完全依赖Kotlin标准库的通用API,在KMP支持的所有目标平台(JVM、JS、Native)都能正常运行,无需额外的平台适配代码,且全部使用基本类型完成计算。
内容的提问来源于stack exchange,提问作者Saher Al-Sous
相关产品推荐
相关产品推荐

