Kotlin整数转十进制及厘米转英尺英寸拆分问题
问题2:拆分英尺高度的整数与小数部分
你当前的问题有两个核心问题:一是用字符串截取浮点数的方式不可靠(浮点数toString()可能出现科学计数法、格式不稳定等情况);二是"0.{$inc}".toInt()写法错误——不仅字符串模板语法不对(应该是"0.$inc"),而且小数不能直接转成Int类型。
正确的解决方式:用数学运算拆分
直接通过数值计算提取整数部分和小数部分,比字符串操作更可靠:
fun onCmToFtChange(_height: Int) { val ftHeight = _height * 0.032808399 // 提取英尺的整数部分 val ftInt = ftHeight.toInt() // 计算小数部分,得到0.xxxx格式的数值 val incDecimal = ftHeight - ftInt _viewState.update { it.copy( ft = ftInt.toString(), inc = incDecimal.toString().substringAfter(".", "").take(1), // 保留原逻辑取小数第一位 _ft = ftInt, _inc = incDecimal // 直接赋值小数部分,若_inc是Double类型 // 如果需要将小数部分转成英寸数(1英尺=12英寸),可以这样写: // _inc = (incDecimal * 12).toInt() ) } }
说明
ftHeight.toInt()直接获取英尺的整数部分,避免了字符串截取的不确定性。ftHeight - ftInt精确计算出小数部分,得到你需要的0.xxxx格式数值。- 若
_inc需要的是整数类型,大概率是要将小数部分转换为英寸数(1英尺=12英寸),此时只需计算incDecimal * 12再转成Int即可。
内容的提问来源于stack exchange,提问作者NewPartizal
相关产品推荐
相关产品推荐

