本文来自:http://blog.csdn.net/blackchoc/article/details/5070779
Number类型
Oracle number datatype 语法:NUMBER[(precision [, scale])]
有效为:从左边第一个不为0的数算起的位数。
scale > 0
精确到小数点右边s位&#xff0c;并四舍五入。然后检验有效位是否 <&#61; p。
scale <0
精确到小数点左边s位&#xff0c;并四舍五入。然后检验有效位是否 <&#61; p &#43; |s|。
scale &#61; 0
NUMBER表示整数
Float类型
【copy】今天有人问我&#xff0c;他把字段类型设计成float(2)后&#xff0c;插入数据93.5&#xff0c;后&#xff0c;为什么变成了90&#xff1f;
为了说明这个问题&#xff0c;我们先来看一段话&#xff08;http://www.cnoug.org/viewthread.php?tid&#61;56643&#xff09;&#xff1a;Oracle Online Help 说&#xff1a;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。
根据这段话&#xff0c;我们可以看到&#xff0c;float(2)中的2是一个binary precision&#xff0c;而不是我们常用的decimal precision。他们之间的换算关系是&#xff1a;binary precision&#xff1d;int(b*0.30103)&#xff0c;因此我们这里实际上的精度应该等于int(2*0.30103)&#61;0&#xff0c;即小数点后精度为0。
回到我们原来的问题&#xff0c;93.5化成浮点型9.35*10^1&#xff0c;这时9.35小数点后精度为0&#xff0c;成9&#xff0c;因此最后变成9*10^1&#61;90。
类似的&#xff0c;我们可以设计成float(10)&#xff0c;那么int(10*0.30103)&#61;3&#xff0c;因此&#xff0c;如果插入93.5&#xff0c;就得出9.35--精度为3-->9.350&#xff0c;9.350*10^1&#61;93.5。如果插入13884.2&#xff0c;得出1.38842--精度为3-->1.388&#xff0c;1.388*10^4&#61;13880。