【问题标题】:How to get an accurate length of a long digit number in Oracle如何在Oracle中获得一个长数字的准确长度
【发布时间】:2020-05-09 01:56:17
【问题描述】:

我正在使用一个架构(不是我创建的),它计算出的方差可能是非常长的数字。我需要识别这些长数字,以便截断它们。问题是它们太长了,长度函数似乎无法识别它们很长。

从双重选择长度(10.00000000000000000000000000000000000004);

结果:2

显然上面的数字长于 2 位数字,但长度函数无法识别这一点。我如何获得这个数字的准确长度,以便找到它们存在的所有情况?

【问题讨论】:

  • 为什么不把所有内容都精确到小数点后三位?
  • 尝试长度(to_char( ....) )
  • 这完全感觉是基数 10 和基数 2 浮点数之间的有损转换。我只是确定有多少数字在它们所代表的大小和圆形中是有意义的。

标签: sql oracle


【解决方案1】:

发生这种情况是因为length() 函数接受字符串作为输入,而不是数字,因此该值在函数看到之前使用某种默认格式隐式转换为字符串。

可能有更优雅的数学解决方案,但一种方法是使用“文本最小值”number formatlength(to_char(num,'TM'))

with demo(num) as (select 10.00000000000000000000000000000000000004 from dual)
select to_char(num)
     , to_char(num,'TM')
     , length(to_char(num,'TM'))
from   demo;

TO_CHAR(NUM)  TO_CHAR(NUM,'TM')                         LENGTH(TO_CHAR(NUM,'TM'))
------------- ----------------------------------------- -------------------------
10            10.00000000000000000000000000000000000004                        41

【讨论】:

  • 非常感谢您的回复和解释,这对我很有帮助!
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2020-04-28
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
相关资源
最近更新 更多