我需要将货币值四舍五入到最接近的分数,然后对该舍入值进行一些操作。我不能使用Round()因为这也会向下舍入。这些都是货币价值。
123.4567 - > 123.46
1.1349 - > 1.14
有没有办法在SQL中执行此操作?如果我需要UDF,请提供有关如何完成该UDF代码的建议。
编辑:数据存储为Float。
答案 0 :(得分:15)
CEILING(moneyvalue * 100) / 100
也许?转换为便士,向上舍入到最近的整个便士,然后转换回美元。
答案 1 :(得分:5)
使用Ceiling
select ceiling(1.1349 * 100) / 100
result is 1.14
答案 2 :(得分:1)
这是一种获得理想结果的hacky方式。乘以100并取上天花板 - 这将以您想要的方式围绕它。然后将其转换回金钱并将其分解为100.
declare
@Value1 decimal(9,4),
@Value2 decimal(9,4)
select
@Value1 = 123.4567,
@Value2 = 1.1349
select
@Value1, @Value2
select
convert(money, ceiling(@Value1 * 100)) / 100,
convert(money, ceiling(@Value2 * 100)) / 100
答案 3 :(得分:1)
以下是一些为其添加精度的代码
SET @Precision = CAST('1' + (SELECT REPLICATE('0',@Precision)) as int)
SET @Amount= CEILING(@Amount * @Precision) / @Precision
RETURN @Amount