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 是唯一的解决方法
我知道 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 是唯一的解决方法