mysql 取 浮点运算_MySQL 浮点数与定点数

浮点数一般用于表示含有小数部分的数值。当一个字段被定义为浮点类型后,如果插入数据的精度超过该列定义的实际精度,则插入值会被四舍五入到实际定义的精度值,然后插入,四舍五入的过程不会报错。在MySQL中float、double(或real)用来表示浮点数。

定点数不同于浮点数,定点数实际上是以字符串形式存放的,所以定点数可以更精确地保存数据。如果实际插入的数值精度大于实际定义的精度,则 MySQL 会进行警告(默认的SQLMode下),但是数据按照实际精度四舍五入后插入;如果SQLMode是在TRADITIONAL (传统模式)下,则系统会直接报错,导致数据无法插入。在MySQL中,decimal(或numberic)用来表示定点数。

浮点数精确性问题例子

create table t (f float( 8,1));desct;insert into t values (1.23456);select * from t; --1.2

insert into t values (1.25456);select * from t; --1.2,1.3

从上面的例子中,可以发现对于第一次插入值1.23456到float(8,1)时,该值被截断,并保存为1.2,而第二次插入值1.25456到float(8,1)时,该值进行了四舍五入然后被截断,并保存为1.3,所以在选择浮点型数据保存小数时,要注意四舍五入的问题,并尽量保留足够的小数位,避免存储的数据不准确。

浮点数与定点数的区别例子

CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));insert into test values(131072.32,131072.32);select * from test;--131072.31,131072.32

从上面的例子中可以看到,c1列的值由131072.32变成了131072.31,这是上面的数值在使用单精度浮点数表示时,产生了误差。这是浮点数特有的问题。因此在精度要求比较高的应用中(比如货币)要使用定点数而不是浮点数来保存数据。

注意:在今后关于浮点数和定点数的应用中,用户要考虑到以下几个原则:

浮点数存在误差问题;

对货币等对精度敏感的数据,应该用定点数表示或存储;

在编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;

要注意浮点数中一些特殊值的处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值