Kotlin中的Double to float舍入问题?

k2arahey  于 2023-04-07  发布在  Kotlin
关注(0)|答案(1)|浏览(437)

我在Kotlin中有一个问题。我有double,我需要转换float this。所以我使用toFloat(),但有时它不能正确工作。
比如说;

1.45.toFloat() -> 1.45
11.45.toFloat() -> 11.45
111.45.toFloat() -> 111.45

这个例子的工作,我想,但当双值来超过百万

1234567.45.toFloat() -> 1234567.5

但我想

1234567.45.toFloat -> 1234567.45

我的错在哪里?

nfs0ujit

nfs0ujit1#

这是每个语言的正确工作.文档周围的浮点数:Kotlin Float
像许多语言一样,Kotlin使用IEEE-754(Wiki)作为浮点数学和表示的标准。
Double的64位宽度和Float的32位宽度的差异意味着当从Double转换为Float时,我们会失去精度。

根据IEEE-754的Wiki,在表下:基本和交换格式我们看到一个浮点数,32位数的最大十进制数是7位。你的例子比Kotlin的Float高,它是一个32位数。
少一位数的数字将允许您使用所需的精度。否则,您将需要使用Double来处理与您期望的一样大的数字。

注意,Double的精度限制为16位有效数字

对于基数较大的数字,可以使用编辑器建议

相关问题