如何像钱一样四舍五入到小数点

时间:2011-08-31 19:51:30

标签: sql sql-server sql-server-2000

我需要将货币值四舍五入到最接近的分数,然后对该舍入值进行一些操作。我不能使用Round()因为这也会向下舍入。这些都是货币价值。

123.4567 - > 123.46
1.1349 - > 1.14

有没有办法在SQL中执行此操作?如果我需要UDF,请提供有关如何完成该UDF代码的建议。

编辑:数据存储为Float。

4 个答案:

答案 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