具有任意精度和一定比例的数字格式的 Oracle to_char 函数

Posted

技术标签:

【中文标题】具有任意精度和一定比例的数字格式的 Oracle to_char 函数【英文标题】:Oracle to_char function with a number format that has an arbitrary precision and certain scale 【发布时间】:2012-02-10 09:43:40 【问题描述】:

这个其实很简单,但我找不到任何有用的东西。

在我的 SQL 查询中,我有一些带有单个刻度值的舍入数字 - round(number,1)。如果将数字四舍五入到某个十进制数字,则会以“9,9”格式打印。

另一方面,如果将数字四舍五入为整数,则仅打印逗号后不带零的整数值,尽管我希望我的查询选择“9,9”格式的数字,即使十进制数字为零。

简而言之,我想我需要类似的东西

to_char((select round(121.01,1), from dual), '*,1') ; 输出121,0

最好的方法是什么?提前致谢

可汗

【问题讨论】:

【参考方案1】:

您所要做的就是在to_char 中指定所需的小数位数。使用格式掩码的问题是您需要在小数点前指定所需的数字数量。

SQL> select to_char(round(121.01,1),'999.9') from dual;

TO_CHA
------
 121.0

SQL> select to_char(round(121.4,1),'999.9') from dual;

TO_CHA
------
 121.4

SQL> select to_char(round(121,1),'999.9') from dual;

TO_CHA
------
 121.0

SQL> select to_char(round(5121,1),'999.9') from dual;

TO_CHA
------
######

SQL>

还有很多其他的formatting options。

【讨论】:

【参考方案2】:

使用 0 而不是 9 表示小数位:

SELECT TO_CHAR( ROUND( 121.01, 1 ), '990D0' ) num FROM DUAL;

NUM  
------
121.0

【讨论】:

如果您想以任意精度(但具有固定比例)很好地显示数字,您可以使用此格式掩码:'FM9G999G999G999G990D0'(甚至更长)。【参考方案3】:

这个简单的查询可能会对您有所帮助,

select to_char(round(121.01,1), '999.0') from dual;

to_char函数中:

9 - 指示在输出中阻止/隐藏零。

0 - 表示在输出中小数点前/后的任意位置显示零。

注意:

没有。 of '9/0's in before/after decimal point 是您要在小数点前/后显示的位数。

【讨论】:

以上是关于具有任意精度和一定比例的数字格式的 Oracle to_char 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何解释数据库中数字的精度和比例?

如何使用复合文字来“fprintf()”具有任意基数的多个格式化数字?

NSDecimalNumber 值的比例和精度

具有智能精度(比例)的 BigDecimal [重复]

没有精度的Oracle数字类型 - 我怎么知道它是否是整数

如何格式化具有指定精度级别的数字?