DECIMAL、NUMERIC 和 NUMBER数据类型

  • 三者都是用于存储精确数值(即没有浮点数舍入误差)的数据类型。
  • 它们都可以指定精度(总位数)和标度(小数位数)。
  • 在存储时,如果小数部分超出指定标度,都会进行四舍五入;如果整数部分超出指定范围,都会报错。

参考链接:
https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT313
http://www.postgresql.org/docs/9.3/interactive/datatype-numeric.html#DATATYPE-NUMERIC-TABLE

在Oracle数据库中只有NUMBER,没有NUMERIC
在这里插入图片描述
在这里插入图片描述

NUMER

通用的数值类型,可以存储任意大小的数据,包括整数和小数。NUMBER 类型可以使用参数来指定精度和小数范围,例如 NUMBER(p,s),其中 p 表示总位数,s 表示小数位数。

NUMBER(p,s)

其中p,s都是可选的,都不填的话p默认为38,s默认为-84~127

  • p:precision精度,总位数。默认情况下,精度为38位,取值范围是1~38之间。也可以用字符*表示38。
  • s:scale小数位,表示精确到多少位,指精确到小数点左边或右边多少位(±决定)
    • 如果s>0,表示精确到小数点右边的位数。
    • 如果s=0(默认值)
    • 如果s<0,对数字取舍到小数点左边的指定位数。

精度(p)和小数位(s)遵循以下规则

  • p<s表示存储的是没有整数的小数。
  • 当一个数的整数部分的长度 > p-s 时,Oracle就会报错
  • 当一个数的小数部分的长度 > s 时,Oracle就会舍入。
  • 当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。
  • 当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入

在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐