PostgreSQL 中的 Float 是否有可能最多保留 3 位小数?
Is it possible to get up to 3 decimal places in Float in PostgreSQL?
我在 PostgreSQL 中有一个 table,它有一个 Float 列。在我的 select 中,我在该列上使用 AVG() ,所以它经常给出一个有很多小数的数字。有什么方法可以限制小数位数最多为3,意思是可以少但不多于3。
这是查询:
SELECT team, AVG(score) FROM team_score_table GROUP BY team
您可以使用 round()
:
select round(val::numeric, 3)
您也可以转换为数字,但您需要适合您的值的精度:
select val::numeric(20, 3)
我实际上更喜欢显式 cast()
,因为它将列的数据类型设置为具有显式比例的 numeric
——这样下游应用程序就知道小数位数结果。
round()
returns 一个 numeric
值,但它是一个“通用”数字,没有指定的比例和精度。
您可以在 this example 中看到差异。
您可以使用几个函数来做到这一点:
SELECT round(42.43666, 2) -- 42.44
SELECT trunc(42.43666, 2) -- 42.43
或演员:
SELECT cast(42.43666 as numeric(20, 2)) -- 42.44
根据你的例子应该是:
SELECT team, round(AVG(score)::numeric, 2) FROM team_score_table GROUP BY team
SELECT team, trunc(AVG(score)::numeric, 2) FROM team_score_table GROUP BY team
SELECT team, cast(AVG(score) as numeric(20,2)) FROM team_score_table GROUP BY team
我在 PostgreSQL 中有一个 table,它有一个 Float 列。在我的 select 中,我在该列上使用 AVG() ,所以它经常给出一个有很多小数的数字。有什么方法可以限制小数位数最多为3,意思是可以少但不多于3。
这是查询:
SELECT team, AVG(score) FROM team_score_table GROUP BY team
您可以使用 round()
:
select round(val::numeric, 3)
您也可以转换为数字,但您需要适合您的值的精度:
select val::numeric(20, 3)
我实际上更喜欢显式 cast()
,因为它将列的数据类型设置为具有显式比例的 numeric
——这样下游应用程序就知道小数位数结果。
round()
returns 一个 numeric
值,但它是一个“通用”数字,没有指定的比例和精度。
您可以在 this example 中看到差异。
您可以使用几个函数来做到这一点:
SELECT round(42.43666, 2) -- 42.44
SELECT trunc(42.43666, 2) -- 42.43
或演员:
SELECT cast(42.43666 as numeric(20, 2)) -- 42.44
根据你的例子应该是:
SELECT team, round(AVG(score)::numeric, 2) FROM team_score_table GROUP BY team
SELECT team, trunc(AVG(score)::numeric, 2) FROM team_score_table GROUP BY team
SELECT team, cast(AVG(score) as numeric(20,2)) FROM team_score_table GROUP BY team