Oracle 如何将小数截断为 1 位有效数字?

Oracle how to truncate a decimal to 1 significant digit?

我想将小数四舍五入到第一位有效数字。 由于它们都有不同数量的前导零小数,因此我搜索了该站点并找到了以下表达式。

TRUNC(EPSILON,LENGTH(REGEXP_SUBSTR(EPSILON,'.0*')))

它适用于小数点后前导 0 位少于 5 位的所有数字,并且当数字有 5 位或更多小数位时,return 不是正确的结果。

编辑:Epsilon 是查询的计算值,计算中使用的值的数据类型为 Number.

示例如下:

**EPSILON**     **Expected Result**     **Actual Result**
0.0000083333    0.000008                0
0.0000047666    0.000004                0
0.000025        0.00002                 0.00002
0.000012195     0.00001                 0.00001
0.00002         0.00002                 0.00002
0.00036333334   0.0003                  0.0003

如有任何帮助,我们将不胜感激!谢谢!

您的代码应该接近执行您想要的操作。我只建议修改正则表达式,以便它考虑点左侧的数字:

TRUNC(EPSILON,LENGTH(REGEXP_SUBSTR(EPSILON,'^\d*\.0*')))