讲解 ORACLE 的数据类型 float
把字段类型设计成 float(2)后,插入数据 93.5,后,为什么变成了 9 为了说明这个问题, 我们先来看一段话: 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。 我们可以从以下测试更加清楚的看到这样的换算规则。
ConnectetOracle9EnterprisEditioReleas9.0.1.1.1 Connecteaaspire SQL> SQL>CREATTABLhjm_float_test (FLOAT(2), FLOAT(10), FLOAT, NUMBER); Tablcreated SQL>INSERINThjm_float_test(a,b,c,dVALUES(93.5,93.5,93.5,93.5); roinserted SQL>INSERINThjm_
float_test(a,b,c,dVALUES(93.665,93.665,93.665,93.665); roinserted SQL>INSERINThjm_float_test(a,b,c,dVALUES(96.5,96.5,96.5,96.5); roinserted