有没有办法向上舍入而不是在值为.005的位置?
E.g。
1.234 - > 1.23
1.235 - > 1.23
1.236 - > 1.24
这是用于开发票的目的。我目前有一张发票,显示的总数为: £46.88 +£9.38 =£56.25 (总计是商定的,但很明显网和增值税都是误导性的,并没有完全相加)
我想将网络下调至46.87英镑
编辑:如何完全停止四舍五入,只显示2位小数?无论如何,我的Grand Total计算正确,因为它从源头拉出而不是添加舍入的小计。如果我阻止小计完全舍入,那么他们应该显示例如1.23并切断.xx5xxx?答案 0 :(得分:2)
假设你在说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
答案 1 :(得分:1)
对于MySQL使用select TRUNCATE(44.875, 2);
对于SQLServer,请使用select ROUND(44.875, 2, 1)
一个好方法是乘以100取整数部分并将其除以100
(在SQLServer select FLOOR(44.875 * 100)/100
中)
<强>更新强>
当我更好地阅读这个问题时,我看到x.xx5应向下舍入并且x.xx6应该向上舍入,所以我将其添加到答案中(SQLServer中的示例,但在其他DB中应该没有太大区别):
select
CASE WHEN FLOOR(44.875 * 1000)-FLOOR(44.875 * 100)*10 <= 5 THEN
FLOOR(44.875 * 100)/100
ELSE
ROUND(44.875, 2)
END
答案 2 :(得分:0)
select ROUND ( @val+0.004 , 2 , 1 )
最后的额外1在mssql而不是舍入中截断,添加0.004会将任何等于或超过.006的任何内容提升到下一个数字,下面的任何内容都将向下舍入。类似的可以在其他sql上用来转换为数字10,2或类似的以获得这种截断,只需添加0.004即可满足您的需求。