我正在寻找一种方法来返回一个调整为“最高”值的值。 25美分硬币。我无法舍入,因为返回的值不能大于原始值。例如,如果值为53.290,则需要返回53.25,而51.49将返回51.25。我可以在t-sql中执行此操作吗?
答案 0 :(得分:2)
在对此进行了一些研究并进行更多研究后,我认为这是最好的解决方案。感谢大家的回复。
DECLARE @myvalue DECIMAL(8,4);
SET @myvalue = 53.26;
SELECT (Floor(@myvalue/.25)) * .25; -- Returns 53.25
SET @myvalue = 53.24;
SELECT (Floor(@myvalue/.25)) * .25; -- Returns 53.00
答案 1 :(得分:2)
你提供的答案,史蒂夫,除以0.25与此代码具有相同的效果。我不确定,但我觉得乘以四分比分数更清晰。
SELECT (FLOOR(@myValue * 4)) / 4.0
答案 2 :(得分:0)
DECLARE @Value DECIMAL(10,4) = 53.290;
SELECT ROUND(@Value/25.00, 2) * 25
Result: 53.250000000
舍入值为TWO数字
SELECT CONVERT(DECIMAL(18, 2), ROUND(@Value/25.00, 2) * 25)
Result: 53.25
答案 3 :(得分:0)
这将根据小数点右侧的值得到最接近的四分之一。我刚刚尝试过它。希望它会有用。只需尝试不同的值。
DECLARE @Value DECIMAL(10, 2) = 53.49
SELECT CASE
WHEN CAST(RIGHT(@Value, 2) AS FLOAT) > 0
AND CAST(RIGHT(@Value, 2) AS FLOAT) <= 49
THEN FLOOR(@Value) + 0.25
WHEN CAST(RIGHT(@Value, 2) AS FLOAT) > 49
AND CAST(RIGHT(@Value, 2) AS FLOAT) <= 74
THEN FLOOR(@Value) + 0.50
ELSE CEILING(@Value) - 0.25
END