как округлить до десятичного знака, как деньги - PullRequest
9 голосов
/ 31 августа 2011

Мне нужно округлить денежные значения до ближайшего цента, а затем выполнить некоторые операции с этим округленным значением.Я не могу использовать Round (), потому что это также будет округлять вниз.Это все денежные значения.

123.4567 -> 123.46
1.1349 -> 1.14

Есть ли способ сделать это в SQL?Если мне нужен UDF, пожалуйста, предложите, как выполнить код для этого UDF.

РЕДАКТИРОВАТЬ: Данные хранятся как Float.

Ответы [ 4 ]

15 голосов
/ 31 августа 2011
CEILING(moneyvalue * 100) / 100

возможно? Конвертировать в копейки, округлить до ближайшего целого пенни, затем конвертировать обратно в доллары.

5 голосов
/ 31 августа 2011

Использование Потолок

select ceiling(1.1349 * 100) / 100

result is 1.14
1 голос
/ 25 января 2017

Вот некоторый код, чтобы добавить к нему точность

SET @Precision = CAST('1' + (SELECT REPLICATE('0',@Precision)) as int)
SET @Amount= CEILING(@Amount * @Precision) / @Precision
RETURN @Amount
1 голос
/ 31 августа 2011

Вот какой-то хакерский способ получить желаемый результат. Умножьте на 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
...