2017-10-05 67 views
2

在我输出服务合同小时数的报表中,我需要将合约小时数加起来。T-SQL:舍入到宿舍

目前我从Navision获得我的“合同时间”字段。我在这几个小时内增加了10%(公司政策),这导致我们可以使用这些时间为这个客户收费。

但是通过这样做,我得到很奇怪的合同小时(10.04,28.82,9.57,...) 现在有一个想法,我们圆了这些数字.25,.50 0.75倍.00 但它需要始终围绕。

10.04应导致10.25

28.82应导致29.00

9.57应导致9.75

我已经做ROUND(@value/25,2)*25想这一点,但是这并没有给我的必然结果。

  • 10.04变为10(当我想到10.25)
  • 28.82变成28.75(当我想到29.00)
  • 9.57变为9.50(当我想到9.75)

任何人可以给我一些有关如何处理此问题的额外提示?

回答

4

您可以使用CEILING函数而不是ROUND,它会在两个人之间“收集”您的数字,即使它们“接近”较小的数字。

您的整体逻辑舍入到“宿舍”看起来不错,但ROUND函数将选择最接近的一个,而不是“下一个更大的”。

此外,你可以使用第二个参数来满足你的需求,但你不能用天花板,所以你将不得不改变数字嘎吱嘎吱一点。

所以,你的情况:

CEILING(@value * 4)/4 

应该做的。


EDIT(感谢@HABO):

如果您处理负数,请记住,这将仍然一轮-10.3将成为-10.25)。如果你需要在这种情况下舍入,以使它看起来像是正面的(即轮-10.3-10.5),你可以用这个变化处理这两种情况:

SIGN(@value) * CEILING(ABS(@value) * 4)/4 

其他注意事项:

  • 本轮下跌前一季度,仅仅通过FLOOR
  • 更换 CEILING
+0

天花板不接受2个参数,但 谢谢你的提示。我会尽力处理它。 – KevinP

+0

你说得对。我会编辑我的答案,以便在一瞬间正确适应。 – Pac0

+0

@KevinP:编辑。 – Pac0