如果x.xx5,则SQL向下舍入

如果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位?我的总计是正确计算的,因为它是从源代码中提取的,而不是添加四舍五入的小计。如果我完全阻止小计取整,

在值为.005的情况下,是否有一种向下取整而不是向上取整的方法

例如

1.234->1.23

1.235->1.23

1.236->1.24

这是开发票用的。我目前有一张发票,上面显示了: £46.88 + £9.38 = £56.25 (总金额是商定的,但很明显净增值税是误导性的,加起来并不准确)

我想把净值降到46.87英镑


编辑:有没有一种可能的替代方法,完全停止舍入,只显示到小数点后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 )