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

Sql 如何像钱一样四舍五入到小数点,sql,sql-server,sql-server-2000,Sql,Sql Server,Sql Server 2000,我需要将货币值四舍五入到最接近的美分,然后对四舍五入的值执行一些操作。我不能使用Round(),因为这也会向下取整。这些都是金钱价值 123.4567-->123.46 1.1349-->1.14 在SQL中有什么方法可以做到这一点吗?如果我需要一个UDF,请提供如何完成该UDF代码的建议 编辑:数据以浮点形式存储 CEILING(moneyvalue * 100) / 100 也许吧?转换成便士,四舍五入到最接近的整便士,然后再转换回美元。使用 这里有一种简单的方法来获得你想要的结果。乘以1

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

123.4567-->123.46
1.1349-->1.14

在SQL中有什么方法可以做到这一点吗?如果我需要一个UDF,请提供如何完成该UDF代码的建议

编辑:数据以浮点形式存储

CEILING(moneyvalue * 100) / 100
也许吧?转换成便士,四舍五入到最接近的整便士,然后再转换回美元。

使用


这里有一种简单的方法来获得你想要的结果。乘以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

下面是一些代码来增加精度

SET @Precision = CAST('1' + (SELECT REPLICATE('0',@Precision)) as int)
SET @Amount= CEILING(@Amount * @Precision) / @Precision
RETURN @Amount

您使用什么数据类型来存储这些值?不确定,SQL Server 2000似乎没有指定精度。长度是8。你试过运行我发布的选择吗@请评论!我投了反对票,因为天花板本身在这里没有用处。你的方法可以修改,但我不知道你的意思。编程论坛,不介意阅读论坛。在我更新答案后删除否决票怎么样?这里什么都没写是石头吧?-是的,你说的对。请对您的答案进行编辑(添加一行或其他内容。Stack说在编辑问题之前我不能更改我的投票。是的,但Marc B击败了您。@Jason:Round()将在指定的限制内进行取整。OP想要无条件取整。有趣的是,OP谈论的是美分,而您的答案是便士和美元。:)显然是离题了。我只是想开怀大笑。@Marc B,我注意到关于1.1349的值。这就是为什么我删除了我的评论。“我花了几分钟时间才通过了round这个词,因为从技术上讲,这不是一个严格的舍入。”杰森·麦克里里-我在学校学到的是“舍入”、“向上舍入”和“向下舍入”。技术总是有很多名称。@MAW74656,因为您将学习口语,而技术规格常常不同。默认情况下,大多数编程语言都是从
1.1349
1.13
。从技术上讲,在你的情况下,你是双重舍入。即3位,小数点后2位。这就是Marc B提供的。欢迎来到StackOverflow。如果你能解释你的代码,让它对其他人更有用,那就太好了。
SET @Precision = CAST('1' + (SELECT REPLICATE('0',@Precision)) as int)
SET @Amount= CEILING(@Amount * @Precision) / @Precision
RETURN @Amount