小数实际上不能完全转换为浮点数格式。
众所周知,因为32位的指数和尾数位数不够大。 IEEE 754标准。
所以我知道可能存在舍入错误。
例如,(我使用十进制到单个转换器。here)
0.1 => actually saved as 0.100000001490116119384765625 not 0.1
0.2 => actually saved as 0.20000000298023223876953125 not 0.2
0.3 => actually saved as 0.300000011920928955078125 not 0.3
但是,当我将上述浮点值分配给浮点变量时,
它们会自动更改为舍入值。代码在这里。
float a_1 = 0.300000011920928955078125f;
float a_2 = 0.20000000298023223876953125f;
float a_3 = 0.100000001490116119384765625f;
Debug.Log(a_1); // result : 0.1
Debug.Log(a_2); // result : 0.2
Debug.Log(a_3); // result : 0.3
那么为什么长整数(可以保存为字节数存储在字节存储器中)变成简单的四舍五入数字(例如0.1、0.2、0.3)? 任何人都可以解释内部流程吗?