当前位置: 首页 > 知识库问答 >
问题:

oracle - 有关Oracle number类型的疑问?

段干茂实
2024-08-29

官方文档:https://docs.oracle.com/en/database/oracle/oracle-database/19...
图片:

number(m,n)里,m是包括整数和小数部分的总位数吧,如果总位数限制为2,那小数位数限制为7有什么意义呢?
如果红框的值是0.9999912,那stored as的值是多少?

共有1个答案

邓崇凛
2024-08-29

在Oracle数据库中,NUMBER 数据类型用于存储固定和浮点数。NUMBER(m,n) 的定义中,m 是数字的总位数(包括小数点左边和右边的位数),而 n 是小数点右边的位数(即小数位数)。

回答问题

  1. m是包括整数和小数部分的总位数吧?

    • 是的,m 是包括整数部分和小数部分的总位数。
  2. 如果总位数限制为2,那小数位数限制为7有什么意义呢?

    • 在Oracle中,如果 m 的值小于 n 的值加上小数点左侧至少需要的位数(至少为1,除非数字是0或负数),这样的定义实际上是不合法的。例如,NUMBER(2,7) 是不合法的,因为小数部分就需要7位,加上至少1位的整数部分,总数至少为8位,超出了 m 指定的2位。
    • 如果你的理解是基于一个假设的或错误的上下文(比如一个误解或笔误),那么通常 m 会远大于 n,以确保有足够的空间来存储整数部分和小数部分。
  3. 如果红框的值是0.9999912,那stored as的值是多少?

    • 如果字段被定义为 NUMBER(m,n),并且 mn 的值足够大以存储 0.9999912(例如 NUMBER(10,7) 或更大),则存储的值将是 0.9999912
    • 如果 mn 的值不足以存储整个数字(如 NUMBER(5,2)),则Oracle会根据四舍五入规则进行舍入。在这种情况下,0.9999912 将无法直接存储为 NUMBER(5,2),因为它需要至少7位小数。如果尝试存储,则可能得到类似 1.00 的结果(取决于具体的四舍五入逻辑和精度损失)。

结论

  • 确保 m 的值足够大,以包含你希望存储的数字的整数部分和小数部分。
  • n 指定了小数点后的位数,但不应超过 m 允许的总位数。
  • 对于 0.9999912,你需要一个至少为 NUMBER(8,7) 或更大的数据类型来精确存储它,以避免精度损失。
 类似资料:
  • 本文向大家介绍javascript中关于类型判断的一些疑惑小结,包括了javascript中关于类型判断的一些疑惑小结的使用技巧和注意事项,需要的朋友参考一下 前言 类型判断是我们在日常工作中经常会遇到的一个功能,本文将给大家详细介绍关于javascript类型判断的相关内容,下面话不多说了,来一起看看详细的介绍吧 Javascript中数据类型分为两种: 简单数据类型:Undefined, NU

  • 主要内容:Oracle INTERVAL数据类型简介在本教程中,我们将介绍Oracle 数据类型,并演示如何有效处理区间值。 Oracle INTERVAL数据类型简介 Oracle提供了两种日期时间数据类型:和用于存储时间点数据。另外,它提供数据类型用于存储一段时间。 有两种类型的: INTERVAL YEAR TO MONTH - 间隔使用年份和月份。 INTERVAL DAY TO SECOND - 使用包括小数秒在内的天,小时,分钟和秒存储

  • 主要内容:Oracle TIMESTAMP数据类型简介,Oracle TIMESTAMP文字,Oracle TIMESTAMP示例,格式化TIMESTAMP值,提取TIMESTAMP组件,默认的TIMESTAMP格式在本教程中将学习Oracle 数据类型以及如何在Oracle数据库中有效处理数据。 Oracle TIMESTAMP数据类型简介 数据类型用于存储日期和时间数据,包括年,月,日,时,分和秒。 另外,它存储小数秒,它不是由DATE数据类型存储的。 要定义列,请使用以下语法: 指定字段小

  • 主要内容:Oracle DATE数据类型简介,Oracle DATE数据类型示例在本教程中将学习Oracle 数据类型以及如何有效地处理日期和时间值。 Oracle DATE数据类型简介 数据类型允许以一秒的精度存储包括日期和时间的时间点值。 数据类型存储年份(包括世纪),月份,日期,小时数,分钟数和秒数。 它的范围从公元前4712年1月1日到公元9999年12月31日(共同时代)。 默认情况下,如果未明确使用BCE,则Oracle使用CE日期条目。 Oracle数据库有其自

  • 主要内容:Oracle NVARCHAR2数据类型简介,Oracle NVARCHAR2的例子,VARCHAR2与NVARCHAR2,以下是纠正/补充内容:本教程向您介绍了Oracle 数据类型,并解释了和之间的区别。 Oracle NVARCHAR2数据类型简介 是可以存储Unicode字符的Unicode数据类型。 的字符集是在数据库创建时指定的国家字符集。 要在数据库中查找的字符集,请使用以下查询: 执行上面查询语句,得到以下结果(因环境不同而不同)- 在笔者的Oracle数据库服务器中,

  • 主要内容:Oracle VARCHAR2数据类型简介,Oracle VARCHAR2最大长度,Oracle VARCHAR2的例子在本教程中将学习Oracle 数据类型以及如何使用它来定义可变长度的字符串列。 Oracle VARCHAR2数据类型简介 要存储可变长度的字符串,可以使用Oracle 数据类型。 列可以存储到字节的值。 这意味着对于单字节字符集,最多可以在列中存储个字符。 当使用列创建表时,必须指定最大字符串长度(以字节为单位): 或以字符 - 默认情况下,如果没有在之后显式指定或

  • 主要内容:Oracle NCHAR数据类型概述,NCHAR与CHAR比较/区别在本教程中,您将了解Oracle 数据类型以及和之间的区别。 Oracle NCHAR数据类型概述 Oracle 数据类型用于存储固定长度的Unicode字符数据。的字符集只能是或,在数据库创建时指定为国家字符集。 当使用列创建表时,列的最大大小始终在字符长度语义中,例如: 在本例中,列的最大长度是个字符。 对于列的最大大小,不可能使用字节长度,如下所示: 列的最大字节长度取决于当前的国家字符集。

  • 主要内容:Oracle CHAR数据类型简介,Oracle CHAR例子在本教程中将学习Oracle 数据类型,它是一种固定长度的字符串类型。 Oracle CHAR数据类型简介 Oracle 数据类型用于存储固定长度的字符串。 数据类型可以存储到字节的字符串。 要定义一个列,需要用字节或字符来指定一个字符串长度,如下所示: 如果没有明确指定或,那么Oracle会默认使用。 如果像下面的例子那样不指定长度,那么长度的默认值是。 插入或更新固定长度字符串列时,Oracl