Kotlin/Java中高效将Double转Int:移除小数点且无内存超限
高效的Double转Int方案(符合示例规则)
字符串处理的方式虽然直观,但会产生额外的字符串对象,在大量转换场景下效率偏低。我们可以通过纯数学运算实现更高效的转换,完全避免字符串操作:
核心思路
根据你的示例规则,转换逻辑为:
- 将Double值逐步乘以10,直到小数部分消失,或者最多乘4次(保留小数点后最多4位)
- 截断剩余的小数部分,转为Int(因为输入均为正数,直接强制转换即可截断)
Java实现
public static int doubleToInt(double d) { double temp = d; int powerCount = 0; // 最多处理4位小数,同时确保小数部分已消除 while (temp != Math.floor(temp) && powerCount < 4) { temp *= 10; powerCount++; } // 输入保证不会超出Int范围,直接强制转换 return (int) temp; }
Kotlin实现
fun doubleToInt(d: Double): Int { var temp = d var powerCount = 0 while (temp != temp.toInt().toDouble() && powerCount < 4) { temp *= 10 powerCount++ } return temp.toInt() }
注意事项
- 该方案仅适用于无精度丢失的正数Double(如小数点后最多4位的小数,或可精确表示的小数),若输入存在浮点数精度误差(如
0.1这类无法精确表示的小数),可能会导致结果不符合预期。 - 输入需确保转换后的Int不会超出Java/Kotlin的Int范围(你已明确此前提,无需额外处理)。
内容的提问来源于stack exchange,提问作者ibrahiem Mohamed
相关产品推荐
相关产品推荐

