如果x.xx5,则SQL向下舍入
在值为.005的情况下,是否有一种向下取整而不是向上取整的方法 例如 1.234->1.23 1.235->1.23 1.236->1.24 这是开发票用的。我目前有一张发票,上面显示了: £46.88 + £9.38 = £56.25 (总金额是商定的,但很明显净增值税是误导性的,加起来并不准确) 我想把净值降到46.87英镑如果x.xx5,则SQL向下舍入,sql,rounding,Sql,Rounding,在值为.005的情况下,是否有一种向下取整而不是向上取整的方法 例如 1.234->1.23 1.235->1.23 1.236->1.24 这是开发票用的。我目前有一张发票,上面显示了: £46.88 + £9.38 = £56.25 (总金额是商定的,但很明显净增值税是误导性的,加起来并不准确) 我想把净值降到46.87英镑 编辑:有没有一种可能的替代方法,完全停止舍入,只显示到小数点后2位?我的总计是正确计算的,因为它是从源代码中提取的,而不是添加四舍五入的小计。如果我完全阻止小计取整,
编辑:有没有一种可能的替代方法,完全停止舍入,只显示到小数点后2位?我的总计是正确计算的,因为它是从源代码中提取的,而不是添加四舍五入的小计。如果我完全阻止小计取整,那么它们应该显示,例如1.23和cut off.xx5xxx?对于MySQL使用
选择TRUNCATE(44.875,2)代码>
对于SQLServer,使用选择ROUND(44.875,2,1)
一个很好的技巧是乘以100,取整数部分除以100
(在SQLServer中选择楼层(44.875*100)/100
)
更新:
当我更好地阅读这个问题时,我看到x.xx5应该向下取整,x.xx6应该向上取整,所以我将此添加到答案中(SQLServer中的示例,但在其他数据库中应该没有太大的不同):
选择
楼层(44.875*1000)-楼层(44.875*100)*10假设您正在谈论SQL Server:
DECLARE @val AS money
SET @val = 5.555
--SET @val = 5.556
SELECT
CASE
WHEN (CAST(FLOOR(@val*1000) as int) % 10) <= 5
THEN FLOOR(@val*100) / 100
ELSE CEILING(@val*100) / 100
END
将@val声明为货币
在val=5.555时设置
--在val=5.556时设置
挑选
案例
当(投射(地板(@val*1000)为整数)%10)
末尾额外的1在mssql中是截断的,而不是四舍五入,加上0.004将使0.006或以上的数字增加到下一个数字,下面的数字将四舍五入。可以在其他sql上使用“相似”来转换为数字10,2或类似值以获得此截断,只需添加0.004即可。然后0.005+0.005=0.00而不是0.01。你最好的办法是解释显示尽可能高的精度,或者对已经截断的值求和听起来像你想要@mucio,我只想把它应用到净,而不是增值税。所以它将是0+0.005(四舍五入到0.01)=0.01。。。而不是当前显示的不正确的0.02。juergen d正是。。。虽然我相信他们不会为0.01争论。。。56.25是商定的。56.26是不正确的。
DECLARE @val AS money
SET @val = 5.555
--SET @val = 5.556
SELECT
CASE
WHEN (CAST(FLOOR(@val*1000) as int) % 10) <= 5
THEN FLOOR(@val*100) / 100
ELSE CEILING(@val*100) / 100
END
select ROUND ( @val+0.004 , 2 , 1 )