首页 > 解决方案 > 浮点数自动四舍五入

问题描述

十进制数实际上不能完全转换为浮点数格式。
你们很多人都知道,因为 32 位中没有足够大的指数和尾数数字。IEEE 754标准。

所以我知道可能存在舍入错误。

例如,(我使用十进制到单个转换器。这里

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)?谁能解释一下内部流程?

标签: c#

解决方案


推荐阅读