大多数编程语言都支持float或者double的数据类型。而数据库中也有相同关键字的数据类型,因此很多开发人员也自然而然地在需要浮点数的地方使用float作为字段类型。
但事实上是否float可以适用于所有的业务场景呢?
float类型是根据IEEE 754标准使用二进制格式编码实数数据,对于一些小数,比如59.95,float类型会存储了二进制中最接近59.95的值,用十进制表示等于59.950000762939。
当然,有些数据库能够通过某种方式弥补这种数据的不精确性,查询结果在时候可以输出我们所期望的值。
如下面所示:
select rate from t_refresh where id =1; Returns:59.95
但是,如果将这个值扩大十亿倍:
select rate * 1000000000 from t_refresh where id =1; Return:59950000762.939
这可能和你期望的结果59950000000.000不太一样了。
在上面在例子中,误差在千万分之一内,对于部分的运算来说已经足够了。
然而,在某些运算中,这样的误差是不能容忍的,如比较的操作:
select * from t_refresh where rate = 59.95 Result:empty set;no rows match,
因为rate的实际存储值是比59.95大一点点。
又如在金融项目中计算复利,需要进行多次浮点数乘法运算,使用float类型会导致误差不断累积。
因此,在某些业务场景中,我们需要用numeric或者decimal来代替float数据类型。
和float类型相比,numeric和decimal存储的是精确值,如果你insert进去的是一个59.95,实际存的也是59.95。
所以在上面在例子中,如果用numeric或者decimal
select rate * 1000000000 from t_refresh where id =1; Return:59950000000
select id from t_refresh where rate = 59.95 Return:1
结论:
float适用于精度要求低, 数值范围大的科学运算场景
金融、统计等精度要求高的场景,则需要用numeric或者decimal
相关推荐
2) 对大数据量查询时,慎用list()或者iterator()返回查询结果, 3) 对于关联操作,Hibernate虽然可以表达复杂的数据关系 4) 对含有关联的PO(持久化对象)时 5) 在一对多、多对一的关系中,使用延迟加载机制,
1. 注意事项 2. 数据库安装 ——2.1 DB2 Express-C Version 11.1 下载 ——2.2 数据库安装步骤 ...—— 6.3 慎用【频繁的停止数据库】 7. 数据库完全卸载 —— 7.1 卸载注意事项 —— 7.2 卸载DB2数据库
自增字段要慎用,不利于数据迁移。 1.3.6 数据库物理存储和环境的设计 在设计阶段,可以对数据库的物理存储、操作系统环境、网络环境进行必要的设计,使得我们的系统在将来能适应比 较多的用户并发和比较大的数据量...
19个城市群地级市数据库更新到1990-2021年已经划分好每个城市群的dta和 ...excel中数据用回归法全部补齐,有些缺失 严重的慎用,可对照表中有效值统计,选择原始数据有效值比重高的使用。共186个变量 ,来自历年城市统
---注意我用的数据库是orcl数据库--- ----建表语句 ----数据库数据 ...注意要慎用,弄不好不数据库能弄挂掉了,下载模仿写的时候一定不要写成死循环,要不自己机器还好,服务器的话。。。。嘿嘿。。
加密的惨剧!慎用文件夹加密软件! 加密的惨剧!慎用文件夹加密软件!
把要删除的文件拖到这个文件上面即可。注意,这是强力删除。一定慎用,因为连垃圾箱都会没有的。
13. 并不是所有索引对查询都有效,SQL 是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL 查询可能不会去利用索引。 索引并不总是对查询有效,应该根据实际情况选择合适的索引,以提高查询速度。 14...
在ActiveX DLL工程中慎用App对象.txt
易语言处理事件命令慎用时钟版源码,处理事件命令慎用时钟版
移动磁盘低格工具(慎用)移动磁盘低格工具(慎用)移动磁盘低格工具(慎用)
强大的ACCESS MDB数据库修复工具,做好备份,慎用。
对接scala的jar包对数据进行建模,并对模型进行管理,运用到hbase、spaark相关的编码技术。
Pyton编程从入门到实践 – 第02章 变量和简单数据类型 02 变量 – 5 02 变量 Hello_world.py message = "Hello Python World!" print(message) 02-1 变量的命名和使用 • 变量名职能包含字母、数字、下划线。 • ...
晚上车牌检测数据集,已经用labelimg标记,yolov8可以用,100张左右,用来做实验使用,企业开发慎用
本篇文章主要介绍了浅谈vue中慎用style的scoped属性,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),SQL和MSDE清理小程序(慎用),
,S012、S013、S014,,,,, D007,触发器,慎用,如有使用必须说明原因,,S015、S016、S017,,,,, D008,存储过程,设计者应将常用的底层数据访问功能封装为存储过程、函数,并说明他们的职责、输入输出参数、重点逻辑,以...
冰冻精灵清除器慎用
慎用六大软件伤硬盘最终版.pdf