MySQL float 类型的精度

总结:




要得到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

 

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

 

 

 


 

 

 


 

 

### 回答1: MySQL中的float和double都是浮点数类型,用于存储小数。float类型占用4个字节,double类型占用8个字节。float类型精度为单精度,即有效数字为7位,double类型精度为双精度,即有效数字为15位。因此,double类型精度float类型更高。在存储小数时,如果需要更高的精度,建议使用double类型。 ### 回答2: MySQLfloat和double是两种数值型数据类型,用来存储带有小数部分的数字。它们的差别在于所占用的存储空间以及精度的不同。 float数据类型可以存储一个单精度浮点数,占用4个字节的存储空间。它的精度大约是7位小数,也就是说,如果使用float来存储一个数值型数据,显示出来的小数部分最多只有7位数字是精确的。如果超过这个位数,就会出现舍入误差。 double数据类型则可以存储一个双精度浮点数,占用8个字节的存储空间。它的精度大约是15位小数,也就是说,使用double来存储一个数值型数据,显示出来的小数部分最多只有15位数字是精确的。与float相比,double的精度更高,可以避免更多的舍入误差。 需要注意的是,在MySQL中,float和double类型的数据存储方式是采用IEEE 754标准来进行存储的。这个标准规定了浮点数的存储结构,即数值的二进制表示、小数点位置、指数大小等等。因此,在使用float和double类型时,需要遵循这个标准来进行数据的处理,以避免数据的不正确处理。 总之,在选择float还是double类型时,需要根据具体的需求来确定。如果数据的精度要求不是很高,可以使用float类型来进行存储。而如果需要更高精度的数据计算,则应该使用double类型来进行存储。在实际的开发过程中,也可以根据数据的具体情况进行试验和优化,以获得更加精确的数据计算结果。 ### 回答3: 在MySQL中,float和double都是数值型数据类型,用于存储浮点数,但是它们之间存在着一些区别。 float是单精度浮点数,占用4个字节,能够存储大约7位小数,可以表示的数值范围是-3.4E38到3.4E38。在使用float类型时应该注意,由于精度有限,可能会出现舍入误差,因此不建议对其用于需要高精度计算的场景。 double是双精度浮点数,占用8个字节,能够存储大约15位小数,可以表示的数值范围是-1.7E308到1.7E308,它的精度float更高,因此更适用于需要高精度计算的场景。 当我们需要更高的精度时,可以考虑使用decimal数据类型。decimal是一种高精度的定点数,可以存储比float和double更多的有效数字。它的存储空间和精度取决于所定义的长度和精度,但是它相较于float和double存储量更大,在处理一些需要大数值范围和高精度的计算时,decimal比double更可靠,即使在高精度的计算中它也可以保持精度不变。 在使用浮点数时需要注意避免计算误差,尤其在需要进行高精度计算时更为明显。为了保证计算的正确性,我们可以采用其他的方法来保证浮点数的计算精度,例如,分离整数部分和小数部分,使用整数进行计算,最后将结果转换成浮点数,或者使用一些高精度计算的库函数进行计算等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值