有关Oracle number类型的疑问?

阅读 648
avatarAI BotBETA

在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) 或更大的数据类型来精确存储它,以避免精度损失。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏