加载中…
个人资料
云淡风轻
云淡风轻
  • 博客等级:
  • 博客积分:0
  • 博客访问:101,136
  • 关注人气:15
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

mysql中的float精度问题

(2011-06-24 15:03:10)
标签:

mysql

php

float

it

分类: MYSQL

要得到1位或2位精确小数的话,整数不能高于 32767

即:f<32767.99


因为 2E15=32768

 所以最多只能正确处理0~32767的整数,

 


要得到3位 精确 小数的话,整数不能高于16383

即:f< 16383 .999

因为 2E14=16384

 

 

 

 

 

 


要得到4位 精确 小数,整数不能高于2047

即:f< 2047 .9999

而 2E11=2048

 

 

 

要得到5位 精确 小数,整数不能高于127

即:f< 127 .99999

而 2E7=128

 

 

 

要得到6位 精确 小数,整数不能高于15

即:f<15 .999999

而 2E4=16

 


要得到7位 精确 小数,整数不能高于0

即:f< 0 .9999999

而 2E0=0

 


要得到8位以上的 精确 小数,是不可能的

即:f不存在

 

笔者得到了一些数据,不过得不到它变化的规律,还请高人指点

笔者得出结论的过程:

我建了这个表:

create table q(

     money float(15,3)

);

然后插入这个数据:

insert into q values(1234567.234);

再select一下读出来后发现,它显示的是:

1234567.250

然后插入这个数据:

insert into q values(12345672.34);

再select一下读出来后发现,它显示的是:

12345672.000

 


也就是说,有10数位与以上的话就会出现不准确的情况。

如果是这样的话:

create table q(
money float(10,3)
);

insert into q values(1234567.3);

得到的是:

1234567.250

insert into q values(1234567);

得到的是:

1234567.000

insert into q values(123456.7);

得到的是:

123456.703

insert into q values(12345.67);

得到的是:

12345.670

insert into q values(32768.990);

得到:32768.988

insert into q values(32767.990);

得到:32767.990

经过很多次的试验

要得到2位小数则 整数部分 最多不能超过32767。

 


表改为:

create table q(
money float(30,10)
);

 


对纯小数部分测试:


insert into q values(0.999);

得到:0.9990000129

insert into q values(0.9999);

得到 :0.9998999834

insert into q values(0.99999);

得到:0.9999899864

insert into q values(327.99);

得到 :327.9899902344

insert into q values(327.999);

得到:327.9989929199

 


表改为:

create table q(
money float(7,2)
);

 


insert into q values(327.99);

得到:327.99

 


insert into q values(327.9999);

得到:328.00

insert into q values(32767.9999);

得到:32768.00

insert into q values(32767.99);

得到: 32767.99

insert into q values(99999.99);

得到: 99999.99

表改为:

create table q(
money float(8,2)
);

insert into q values(999999.99);

得到 :1000000.00

insert into q values(999998.99);

得到:999999.00

insert into q values(130999.99);

得到:130999.99

表改为:

create table q(
money float(9,3)
);

insert into q values(32768.990);

得到: 32768.988

insert into q values(32767.990);

得到:32767.990

insert into q values(16383.999);

得到:16383.999                                 

要得到3位小数的话,整数不能高于16383

insert into q values(32767.90);

得到:32767.900

 


insert into q values(32768.90);

得到:32768.898


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/afternoone/archive/2009/05/14/4183556.aspx

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有