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