提问人:Rayyan Khan 提问时间:3/8/2023 更新时间:3/8/2023 访问量:51
我想在 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
问:
我目前正在计算“嘶嘶声”,它等于音量 * fizzyfactor / 100。
但是,这些值会变成很长的浮点数。我想将它们四舍五入到小数点后一位。
使用数字进行类型转换时,它仍然具有相同的输出。为什么?我该如何解决这个问题?
这是我的查询:
create or replace view fizz(softdrink, store, fizziness)
as
select 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|
评论
psql
\d fizz
select name, store, (volume * fizzyfactor/100)::decimal(5,1) as fizziness