获得数字除法的准确结果

Posted

技术标签:

【中文标题】获得数字除法的准确结果【英文标题】:Get exact result for number division 【发布时间】:2013-06-06 13:53:03 【问题描述】:

SELECT 9/24

为什么给postgresql自动四舍五入的结果?

有一些选项可以防止这种情况发生吗? (也就是说,我需要除法后,如果结果是浮点数,则返回精确而不是四舍五入的结果)。

更新

例如从函数,我需要返回浮点数

       CREATE OR REPLACE FUNCTION division_test (arg1 INTEGER, arg2 INTEGER,) RETURNS NUMERIC
        AS $$
            BEGIN
            RETURN arg1 / arg2;
            END;
        $$
        LANGUAGE plpgsql;

SELECT division_test (9,2)

结果:4

如何解决这个问题?

【问题讨论】:

【参考方案1】:

没有尝试过,SELECT 9.0/2.0会帮助你吗?

作为对已编辑问题的回答:

更改参数中的数据类型会有帮助吗?

       CREATE OR REPLACE FUNCTION division_test (arg1 REAL, arg2 REAL) RETURNS REAL
        AS $$
            BEGIN
            RETURN arg1 / arg2;
            END;
        $$
        LANGUAGE plpgsql;

或者根据您所需的精度,您也可以使用NUMERIC 或其他配件numeric type。

【讨论】:

@OTARIKI:因为两个输入参数都是整数,所以结果也会被转换为整数,给你一个“四舍五入”的结果。将输入参数的类型更改为real时,除法的结果也是real @a_horse_with_no_name --- 谢谢。 正如所指出的,它与除法运算的输入参数有关。但是,为了清楚起见,它不一定是一个函数。对选择进行类型转换也是如此。如:SELECT (9/2) as int_value, (9::real/2::real), (9::numeric/2::numeric) as numeric_value;【参考方案2】:

一个选项乘以或除以 1.0,结果将是小数。

psql (9.4.5)
Type "help" for help.

tabd=# select 1 / 10;  
----------
    0 (1 row)

tabd=# select 1.0 * 1 / 10;    
------------------------
 0.10000000000000000000 (1 row)

【讨论】:

以上是关于获得数字除法的准确结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中舍入整数除法并获得 int 结果? [复制]

输出除法结果,包括小数点后的数字 - Qt

JAVA 中除法后小数精度问题

标量的OpenCV双矩阵除法产生不正确的结果

为什么整数除法的结果的类不是整数?

excel2007除法结果为啥只有整数,怎样才能保留两位小数?