gpt4 book ai didi

java - 自动截断浮点值

转载 作者:行者123 更新时间:2023-12-02 05:41:26 31 4
gpt4 key购买 nike

需要以下方面的帮助。我的以下值被截断如下:

    float data1 = 48.12345678f;
float data2 = 12.12345678f;
float data3 = 90.12345678f;
float data4 = 56.12345678f;

System.out.println(data1);
System.out.println(data2);
System.out.println(data3);
System.out.println(data4);

Output -

48.123455
12.123457
90.12346
56.123455

它看起来像一个浮点值属性,如果我们使用 double 值,它将得到修复。

尽管 JVM 版本看起来相同,但不同系统的情况有所不同。所以我需要找到一个解释,四舍五入的依据是什么。在一种情况下,它会递增数字 (12.123457),而在另一种情况下,它会递减数字 (48.123455)。那么您能否帮助我理解这种歧义的原因以及哪些属性导致不同系统的结果不同。

最佳答案

这是由于 float 在计算机内存中的表示方式所致。这是 float 如何存储在内存中的在线演示(二进制表示)

http://www.h-schmidt.net/FloatConverter/IEEE754.html

根据IEEE 754标准,单精度数存储在由1个符号位、8个指数位和23个尾数位组成的32位字中。如果您按照如何表示数字 48.12345678 的步骤进行操作,您会发现存在下溢,并且一些位被截断,因为它超过了 23 个尾数位

例如,在上面的链接中,尝试在十进制表示中插入:48.12345678,然后按 Enter。您将看到该数字将转换为 48.123455,在其上方您将找到该数字的二进制单精度表示形式

关于java - 自动截断浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24483918/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com