You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL对计算表达式执行round保留两位小数后仍显示四位小数问题

你遇到的问题本质是CASE表达式的返回类型隐式转换导致的:CASE语句会自动将所有分支的返回值对齐到精度最高的那个数据类型,你原代码里ELSE分支直接返回了原本的UnitPrice字段,这个字段本身的类型是保留4位小数的数值类型,所以哪怕其他分支用ROUND计算出了两位小数的结果,最终整个CASE的返回值会被自动补零到4位小数。

解决方法

  • 方案1:统一所有分支的小数精度,给ELSE分支也加上ROUND处理
    修改后的代码如下:
select p.ProductName, p.UnitPrice, s.CompanyName, c.CategoryName,
 case 
    when c.CategoryName in ('Condiments', 'Beverages') then round((UnitPrice + (UnitPrice * .2)), 2)
    when c.CategoryName in ('meat/poultry', 'seafood') then round((UnitPrice + (UnitPrice * .15)), 2)
    when s.CompanyName = 'New Orleans Cajun Delights' then round((UnitPrice + (UnitPrice * .08)), 2)
    else round(p.unitprice, 2)
 end as NewUnitPrice
from products p
join Categories c on c.CategoryID = p.CategoryID
join Suppliers s on s.SupplierID = p.SupplierID
  • 方案2:直接对整个CASE表达式做强制类型转换,固定返回2位小数,不同数据库语法稍有差异:
    • MySQL/PostgreSQL 写法:CAST( [你的CASE语句] AS DECIMAL(10,2) ) as NewUnitPrice
    • SQL Server 写法:CONVERT(DECIMAL(10,2), [你的CASE语句]) as NewUnitPrice

如果完成上述修改后查询结果还是显示4位小数,属于数据库客户端的默认展示规则问题,可以在客户端的显示设置中调整小数展示位数。

内容的提问来源于stack exchange,提问作者James Krueger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:54:02