select (4*(22/7)*3958.759*3958.759) as "Earth's Area" from dual;
Prints:
Earth's Area
------------
197016573
应该打印出197016572.595304。输出结果为什么忽略了小数点后的数字?
我假设你正在使用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 numformat
或 column format
来覆盖 numwidth
参数的值。
这是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文档。
to_char((4*(22/7)*3958.759*3958.759)), 'FM99999990D00999999999')
FM 去除前导空格。9 表示该位置上的数字是可选的。D 表示小数分隔符。0 表示该位置上的数字是必需的。
SELECT CAST((4*(22/7)*3958.759*3958.759) AS DOUBLE) as "地球面积" FROM dual;
- Steven Ackley
197016572.595304
,看起来有其他原因导致了这个问题。 - Mahmoud Gamalselect (4.0*(22.0/7.0)*3958.759*3958.759) as "地球面积" from dual;
- Saju