皕杰技术社区

 找回密码
 立即加入

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 669|回复: 2

用皕杰报表合计为什么会出现很多位小数?

[复制链接]
发表于 2021-12-9 11:10:17 | 显示全部楼层 |阅读模式


经常有人问,我用皕杰报表计算时,总是得不到想要的结果。那是你没搞明白计算机是通过二进制来计算的,在把十进制小数转化为二进制时有时会是一串无限循环的二进制数,计算机是无法表达无限循环的二进制数的,毕竟计算机的资源是有限。    因此,计算机只能用「近似值」来表示该二进制,那么意味着计算机存放的小数可能不是一个真实值,现在基本都是用 IEEE 754 规范的单精度浮点类型或双精度浮点类型来存储小数的,根据精度的不同,近似值也会不同。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即加入

x
 楼主| 发表于 2021-12-9 11:11:18 | 显示全部楼层
你会看到在计算机中 0.1 + 0.2 并不等于完整的 0.3,这主要是因为有的小数无法可以用「完整」的二进制来表示,所以计算机里只能采用近似数的方式来保存,那两个近似数相加,得到的必然也是一个近似数。
     那么计算机是怎么存小数的?
     计算机是以浮点数的形式存储小数的,大多数计算机都是 IEEE 754 标准定义的浮点数格式,包含三个部分:
符号位:表示数字是正数还是负数,为 0 表示正数,为 1 表示负数;
指数位:指定了小数点在数据中的位置,指数可以是负数,也可以是正数,指数位的长度越长则数值的表达范围就越大;
尾数位:小数点右侧的数字,也就是小数部分,比如二进制 1.0011 x 2^(-2),尾数部分就是 0011,而且尾数的长度决定了这个数的精度,因此如果要表示精度更高的小数,则就要提高尾数位的长度;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-9 11:11:33 | 显示全部楼层
本帖最后由 爱自行车的拓跋 于 2021-12-9 11:14 编辑

用 32 位来表示的浮点数,则称为单精度浮点数,也就是我们编程语言中的 float 变量,而用 64 位来表示的浮点数,称为双精度浮点数,也就是 double 变量。
    所以说这不是皕杰报表的问题,而是计算机的本能。在皕杰报表里为你提供了显示格式的设置,可以选择保留几位小数。另外还提供了round()函数进行四舍五入,可以根据你的精度要求去四舍五入。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

QQ|小黑屋|手机版|皕杰软件 ( 京ICP备14050931号 )

GMT+8, 2025-2-5 20:52 , Processed in 1.365428 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表