为什么Oracle SQL SELECT表达式不打印小数值?

3
select (4*(22/7)*3958.759*3958.759) as "Earth's Area" from dual;

Prints:
Earth's Area
------------
   197016573

应该打印出197016572.595304。输出结果为什么忽略了小数点后的数字?

1
你的查询应该可以正常工作并且打印出 197016572.595304,看起来有其他原因导致了这个问题。 - Mahmoud Gamal
在演示中可以运行,但在您的环境中却无法运行? - codingbiz
是的,在SQL Fiddle上可以执行。为什么我的SQL Plus提示符上不行?奇怪!可能的原因是什么? - Faisal
尝试运行以下代码:select (4.0*(22.0/7.0)*3958.759*3958.759) as "地球面积" from dual; - Saju
输出仍然相同。小数点后没有数字。 - Faisal
3个回答

4

我假设你正在使用SQL*PLUS。你看不到数字的其余部分是因为 numwidth 参数的值。默认情况下它是10,因此你需要进行一些调整,比如将其设置为30。这是一个示例:

SQL> select (4*(22/7)*3958.759*3958.759) as "Earth's Area" from dual;

Earth's Area                                                                    
------------                                                                    
   197016573                                                                    

SQL> set numwidth 31

SQL> select (4*(22/7)*3958.759*3958.759) as "Earth's Area" from dual;

 Earth's Area                                                 
----------------                                                 
 197016572.595304  

同时,您可以通过 set numformatcolumn format 来覆盖 numwidth 参数的值。


2

这是SQL*Plus,与从数据库返回的内容无关。您可以使用SQL*Plus列格式化命令来获得所需的格式,如下所示:

SQL> select (4*(22/7)*3958.759*3958.759) as "Earth's Area" from dual;

Earth's Area
------------
   197016573

SQL> col "Earth's Area" for 99,999,999,999.9999999
SQL> /

           Earth's Area
-----------------------
    197,016,572.5953040

有关格式选项的更多详细信息,请参阅此处的Oracle文档。


0
to_char((4*(22/7)*3958.759*3958.759)), 'FM99999990D00999999999')

FM 去除前导空格。9 表示该位置上的数字是可选的。D 表示小数分隔符。0 表示该位置上的数字是必需的。


我不想使用任何函数。 - Faisal
尝试执行以下语句:SELECT CAST((4*(22/7)*3958.759*3958.759) AS DOUBLE) as "地球面积" FROM dual; - Steven Ackley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接