Kotlin - 在保持精度的同时将 Float 转换为 Double

ser*_*0ne 5 floating-point kotlin

在 Kotlin 中123.456是一个有效值Double,但是,123.456F.toDouble()导致123.45600128173828- 大概只是在两者之间处理精度的方式。

我希望能够在两者之间自由转换,特别是对于这样的情况:

123.456F -> 123.456 // Float to Double

123.456 -> 123.456F // Double to Float
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何将浮点数转换为双精度数并保持精度?

Tod*_*odd 6

这是一个很大的丑陋,但您可以将您的转换Float为 aString并返回到 a Double

val myDouble: Double = 123.456f.toString().toDouble()
// 123.456d
Run Code Online (Sandbox Code Playgroud)

您始终可以将其封装在扩展函数中:

fun Float.toExactDouble(): Double = 
    this.toString().toDouble()

val myDouble = 123.456f.toExactDouble()
Run Code Online (Sandbox Code Playgroud)