我在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
我的错在哪里?
nfs0ujit1#
这是每个语言的正确工作.文档周围的浮点数:Kotlin Float像许多语言一样,Kotlin使用IEEE-754(Wiki)作为浮点数学和表示的标准。Double的64位宽度和Float的32位宽度的差异意味着当从Double转换为Float时,我们会失去精度。
根据IEEE-754的Wiki,在表下:基本和交换格式我们看到一个浮点数,32位数的最大十进制数是7位。你的例子比Kotlin的Float高,它是一个32位数。少一位数的数字将允许您使用所需的精度。否则,您将需要使用Double来处理与您期望的一样大的数字。
注意,Double的精度限制为16位有效数字
对于基数较大的数字,可以使用编辑器建议
1条答案
按热度按时间nfs0ujit1#
这是每个语言的正确工作.文档周围的浮点数:Kotlin Float
像许多语言一样,Kotlin使用IEEE-754(Wiki)作为浮点数学和表示的标准。
Double的64位宽度和Float的32位宽度的差异意味着当从Double转换为Float时,我们会失去精度。
根据IEEE-754的Wiki,在表下:基本和交换格式我们看到一个浮点数,32位数的最大十进制数是7位。你的例子比Kotlin的Float高,它是一个32位数。
少一位数的数字将允许您使用所需的精度。否则,您将需要使用Double来处理与您期望的一样大的数字。
注意,Double的精度限制为16位有效数字
对于基数较大的数字,可以使用编辑器建议