PostgreSQL- Round REAL 数据类型(是的,我知道数字存在)

PostgreSQL- Round REAL data type (yes, I know numeric exist)

我知道 REAL 数据类型不准确,通常对于货币我应该使用 numeric 数据类型。 但是,我被要求做一些事情,其中​​一个条件是数据类型是真实的。 例如,当我尝试执行 round((....),2) 时,我发现此数据类型不存在轮函数。 我的问题是,在不进行转换的情况下,是否有任何函数可以 return 将 REAL 值四舍五入为 0?

非常感谢!1

将圆点后的数值四舍五入为 0?

ROUND(numeric_value, 0)

如您所见here 没有任何类型转换就无法舍入。它只有两种功能存在:

round(dp or numeric) - 四舍五入到最接近的整数

round(v numeric, s int) - 四舍五入到 s 位小数

实数 = 双精度。所以如果你想得到一些小数位,你仍然需要使用 convert:

select round('123.456789'::real::numeric,2)

更新。注意四舍五入+大实数:

select round('12122156.567'::real::numeric, 2); --< rounding up to 6 digits, result = 12122200
select round('12122156.567'::real::DOUBLE PRECISION::numeric,2); --<< rounding result = 12122157

或者您可以使用不带小数位的舍入:

select round('123.456789'::real)

经过调查,转换为 ::numeric 是唯一的解决方法