在Kotlin的Double.toInt()中使用哪种方法舍入或截断?
在官方的API文档上 ,它说:
以Int形式返回此数字的值,可能涉及四舍五入或截断。
我想截断,但不知道。 任何人都可以解释may involve rounding or truncation
的确切含义吗?
ps:在我的单元测试中, (1.7).toInt()
是1, 可能涉及截断。
Double.toInt()
的KDoc是从Number.toInt()
继承而来的,具体的含义是,在具体的Number
实现中如何将其转换为Int
。
在Kotlin中, Double
操作符合IEEE 754标准, Double.toInt()
转换的语义与在Double.toInt()
转换为int
的语义相同,也就是说,正常数字向零舍入,丢弃小数部分:
println(1.1.toInt()) // 1 println(1.7.toInt()) // 1 println(-2.3.toInt()) // -2 println(-2.9.toInt()) // -2
首先,这个文档是从Java的文档中直接复制的。
据我所知只能截断小数点,例如3.14
会变成12.345
会变成12.345
变成9
。
读这个答案和它下面的意见表明,没有实际的四舍五入。 “舍入”实际上是截断的。 舍入与Math.floor
不同,舍入为Integer.MIN_VALUE
,舍入为0
。