浮点数自动舍入

时间:2018-06-21 10:46:14

标签: c#

小数实际上不能完全转换为浮点数格式。
众所周知,因为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)? 任何人都可以解释内部流程吗?

0 个答案:

没有答案