c# - 浮点数自动四舍五入
问题描述
十进制数实际上不能完全转换为浮点数格式。
你们很多人都知道,因为 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)?谁能解释一下内部流程?
解决方案
推荐阅读
- javascript - 问题加载事件 Fullcalendar.io
- java - Vaadin 7 ExcelExport 导出的文件格式不正确。
- android - 使用 Firebase 配置 Proguard 规则
- perl - 管理并行进程
- javascript - AJAX jQuery 新版本关于“插入数据库而不加载页面”
- r - R tablegrob 条件格式,用于根据列值设置颜色
- api - 我使用 JWT 身份验证时无法使用 Symfony 登录 - Symfony 3.4
- unicode - Unicode 字符的名称
- windows - 如果我的 .vimrc 包含 `:cd` 命令,使用文件作为参数启动 Vim 不起作用
- reactjs - 如何在打字稿中导入 react-cookie