【问题标题】:How can I return 3 degrees of precision from oracle number?如何从 oracle 号返回 3 度精度?
【发布时间】:2020-02-14 18:19:08
【问题描述】:

我们在 Access 中有一个科学应用程序,我正在迁移到 Oracle。访问数据类型是数字。 Oracle 是数字 (20,12)。

数据是我们在报告中向用户显示的小数字,例如 1.000 E-5。

然而,这个数字实际上类似于 0.0000099999,即 0.99999 E-5。

我可以将数字转换为科学记数法,但它返回 0.99999 E-5 而不进行四舍五入。我希望能够对这个数字进行四舍五入。不幸的是,就小数点数而言,这些数字都已经结束了。例如:

0.9999E-5

0.9999E-10

所以我认为直接 ROUND(N,X) 是行不通的。我想四舍五入到小数点后 3 位并以科学计数法显示。本质上,这是精确度的科学概念,其中小数位数不同,但有效数字数始终为 3。

【问题讨论】:

    标签: oracle


    【解决方案1】:

    我想这就是你想要的?

    select to_char(0.0000099999 , '9.999EEEE') from dual
    

    1.000E-05

    select to_char(0.0000000000099999 , '9.999EEEE') from dual
    

    1.000E-11

    【讨论】:

    • 你需要知道这个数字是多少位数,关键是它们都是可变的。所以我可以有 0.999 和 0.00009999。
    • @rob 不确定我理解。 to_char(0.999 , '9.999EEEE') 返回 " 9.990E-01" 。这不是你想要的吗?
    • 是的,但我也需要舍入它。输入:0.00009999 所需输出 1.00E-05。我可以四舍五入,但我不确定如何绕过可变数据。例如,有时是 0.99,有时是 0.00000999。
    • @Rob 只是澄清一下,所以您需要对所有数字进行四舍五入吗?如果是这样,输出将是.. 0.00009999 => 1.000E-04 和 0.0009999 => 1.000E-03 和 0.009999 => 1.000E-02 和 0.09999 => 1.000E-01 和 0.9999 => 1.000E-00 等等on ...这是你所期望的吗?
    【解决方案2】:

    如果每个数字都需要四舍五入(根据您的最新评论),我假设预期输出如下:

    0.00009999 => 1.000E-04
    0.0009999 => 1.000E-03
    0.009999 => 1.000E-02
    0.09999 => 1.000E-01
    0.9999 => 1.000E-00

    如果是这样,请尝试:

    select to_char(round(<input>,abs(trunc(log(10,<input>)))),'0.999EEEE') from dual

    例子:

    select to_char(round(0.00009999,abs(trunc(log(10,0.00009999)))),'0.999EEEE') from dual

    输出:

    1.000E-04

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多