党建联盟网站建设通知盘多多网盘搜索
Questions: 将表中的某字段类型设计成float(2)后,向其插入数据93.5后,最好结果却变成了90?这是为什么?
关于这个问题 官方帮助文档(Oracle Online Help )的说明如下:
FLOAT(b) specifies a floating-point number with binary precision b. The precision b can range from 1 to 126. To convert from binary to decimal precision, multiply b by 0.30103。
可以看出,float(2)中的2是一个binary precision,而不是我们常用的decimal precision。他们之间的换算关系是:binary precision=int(b*0.30103),因此我们这里实际上的精度应该等于int(2*0.30103)=0,即小数点后精度为0。
93.5化成浮点型9.35*10^1,这时9.35小数点后精度为0,成9,因此最后变成9*10^1=90。
倘若将字段设计成float(10),那么int(10*0.30103)=3,因此,若插入93.5,就得出9.35–精度为3–>9.350,9.350*10^1=93.5。如果插入13884.2,得出1.38842–精度为3–>1.388,1.388*10^4=13880。
SQL>
SQL> show user;
USER is "SCOTT"
SQL>
SQL>
SQL> create table maxwell_float_test2 (a FLOAT(2),3 b FLOAT(10),4 c FLOAT,5 d NUMBER);Table created.SQL> INSERT INTO maxwell_float_test(a,b,c,d)VALUES(93.5,93.5,93.5,93.5);1 row created.SQL> INSERT INTO maxwell_float_test(a,b,c,d) VALUES(93.665,93.665,93.665,93.665);1 row created.SQL> INSERT INTO maxwell_float_test(a,b,c,d) VALUES(96.5,96.5,96.5,96.5);1 row created.SQL> INSERT INTO maxwell_float_test(a,b,c,d) VALUES(13884.2,13884.2,13884.2,13884.2);1 row created.SQL> commit;Commit complete.SQL> select * from maxwell_float_test;A B C D
---------- ---------- ---------- ----------90 93.5 93.5 93.590 93.67 93.665 93.665100 96.5 96.5 96.510000 13880 13884.2 13884.2SQL> set pagesize 200 linesize 200
SQL> desc maxwell_float_test;Name Null? Type----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------A FLOAT(2)B FLOAT(10)C FLOAT(126)D NUMBERSQL> col name format a10
SQL> col type format a10
SQL> desc maxwell_float_test;Name Null? Type----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------A FLOAT(2)B FLOAT(10)C FLOAT(126)D NUMBERSQL>
请注意注意 float(b)中的b是二进制的精度,进行换算 binary precision=int(b*0.30103)。