游戏网站建设内容好的版式设计网站
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)。
