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

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

它应该打印 197016572.595304。为什么点后的数字在输出中被忽略?

4

3 回答 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  

您也可以通过或覆盖numwidth参数的值set numformatcolumn format

于 2013-01-27T13:57:03.800 回答
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 文档在此处

于 2013-01-27T13:56:54.433 回答
0
to_char((4*(22/7)*3958.759*3958.759)), 'FM99999990D00999999999')

FM 删除前导空白。9 代表该位置的可选数字。D 代表小数分隔符。0 代表该位置的强制性数字。

于 2013-01-27T13:50:47.023 回答