微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有科学计数法的Oracle舍入函数

如何解决具有科学计数法的Oracle舍入函数

有人知道如何使它在Oracle中工作吗?该值是表中的值,我需要将此值舍入为两位数:

  Select round(3.00345678908765E+60,2) from dual

解决方法

您需要将舍入移位-60个小数位(因此从+2到-58):

Select round( 3.00345678908765E+60,-58) from dual

输出:

|                               ROUND(3.00345678908765E+60,-58) |
| ------------------------------------------------------------: |
| 3000000000000000000000000000000000000000000000000000000000000 |

如果要舍入到3个有效数字:

SELECT ROUND( value,2 - FLOOR( LOG( 10,value ) ) ) FROM table_name;

其中的示例数据:

CREATE TABLE table_name ( value ) AS
SELECT 3.00345678908765E+60 FROM DUAL UNION ALL
SELECT 3.00555678908765E+60 FROM DUAL UNION ALL
SELECT 3.05345678908765E+58 FROM DUAL;

输出:

|                           ROUND(VALUE,2-FLOOR(LOG(10,VALUE))) |
| ------------------------------------------------------------: |
| 3000000000000000000000000000000000000000000000000000000000000 |
| 3010000000000000000000000000000000000000000000000000000000000 |
|   30500000000000000000000000000000000000000000000000000000000 |

或者您可以使用TO_CHAR将值转换为以科学计数形式四舍五入的字符串:

SELECT TO_CHAR( value,'FM0.00EEEE' ) AS as_string,TO_NUMBER(TO_CHAR( value,'FM0.00EEEE' )) AS as_number
FROM   table_name;

输出:

AS_STRING |                                                     AS_NUMBER
:-------- | ------------------------------------------------------------:
3.00E+60  | 3000000000000000000000000000000000000000000000000000000000000
3.01E+60  | 3010000000000000000000000000000000000000000000000000000000000
3.05E+58  |   30500000000000000000000000000000000000000000000000000000000

db 提琴here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。