我想在 SQL 中将类型转换为 numeric(5,1) 以使值四舍五入到小数点后一位 - 但是,这不起作用

I want to typecast in SQL to numeric(5,1) in order to have values round to one decimal point - however, this fails to work

提问人:Rayyan Khan 提问时间:3/8/2023 更新时间:3/8/2023 访问量:51

问:

我目前正在计算“嘶嘶声”,它等于音量 * fizzyfactor / 100。

但是,这些值会变成很长的浮点数。我想将它们四舍五入到小数点后一位。

使用数字进行类型转换时,它仍然具有相同的输出。为什么?我该如何解决这个问题?

这是我的查询:

create or replace view fizz(softdrink, store, fizziness)
as
select name, store, (volume * fizzyfactor/100)::decimal(5,1) as fizziness

我的输出如下所示:Column under 'fizziness' looks like this instead of having one decimal point

SQL 数据库 PostgreSQL 强制转换 子查询

评论

0赞 philipxy 3/8/2023
为什么在提问时不应该上传代码/数据/错误的图像?调试问题需要一个最小的可重现示例如何咨询帮助中心
0赞 Adrian Klaver 3/8/2023
我无法重现,您需要提供更多信息(作为问题的更新) 1) Postgres 版本 2) 结果是什么?3) 的结果。不要将信息添加为图像,而是以文本形式复制并粘贴到您的问题中。psql\d fizzselect name, store, (volume * fizzyfactor/100)::decimal(5,1) as fizziness

答:

0赞 Toastin 3/8/2023 #1

有什么理由不能使用 SQL Round() 函数吗? 如果没有,您可以使用此查询四舍五入到小数点后一位

create or replace view fizz(softdrink, store, fizziness)
as
select name, store, Round((volume * fizzyfactor/100),1) as fizziness

您可以在此处阅读有关 Round() 函数的更多信息:

https://www.postgresqltutorial.com/postgresql-math-functions/postgresql-round/

评论

1赞 jarlh 3/8/2023
当 OP 使用 Postgresql 时,不要链接到 SQL Server 页面。(产品之间的差异太多了。
0赞 Marmite Bomber 3/8/2023 #2

打字时...它仍然具有相同的输出。为什么?

请重新检查您的数据库

请参阅以下示例,按预期使用;获得与::decimal(5,1)round

with dt as ( 
select * from (values 
(13, .7),
(12345, .1345)
) dt(volume, fizzyfactor)
)
select volume, fizzyfactor,
(volume * fizzyfactor/100) as fizziness,
(volume * fizzyfactor/100)::decimal(5,1) as fizziness_cast,
round((volume * fizzyfactor/100),1) as fizziness_round
from dt;

volume|fizzyfactor|fizziness             |fizziness_cast|fizziness_round|
------+-----------+----------------------+--------------+---------------+
    13|        0.7|0.09100000000000000000|           0.1|            0.1|
 12345|     0.1345|   16.6040250000000000|          16.6|           16.6|