SQL простое округление - PullRequest
       30

SQL простое округление

3 голосов
/ 21 февраля 2020

Запрос:

declare @a float(10);
declare @b float(10);
declare @c float(10);
set @a = 150.50;
set @b = 19;
set @c = 100;
select @a * @b / @c as result
,ROUND(@a * @b / @c, 2) as rounded

В результате:

| result  | rounded  |    
----------------------
| 28.595  | 28.59    |

Должно ли округленное быть 28,60? Как мне этого добиться?

Ответы [ 4 ]

1 голос
/ 21 февраля 2020

Вы говорите:

I need two decimal places, result should be 28.60

Это предложение несколько двусмысленно. К счастью, номер, который вы указываете, проясняет ситуацию:

  1. Вы хотите округлить до ONE десятичное место. Это делается путем изменения второго параметра функции ROUND: ROUND(@a * @b / @c, 1) as rounded Но также ...
  2. Вы хотите DISPLAY две десятичные цифры. Это связано не с функцией ROUND, а с функциями форматирования. Один трюк - преобразовать в десятичный тип с точным количеством десятичных разрядов, которое вы хотите: convert(decimal(10,2),ROUND(@a * @b / @c, 1)) as rounded
1 голос
/ 21 февраля 2020

Я думаю, что вы можете использовать следующий код

declare @a float(10);
declare @b float(10);
declare @c float(10);
set @a = 150.50;
set @b = 19;
set @c = 100;
select @a * @b / @c as result
,FORMAT(ROUND(@a * @b / @c, 1),'N') as rounded

и набор результатов будет;

+--------+---------+
| result | rounded |
+--------+---------+
| 28.595 |   28.60 |
+--------+---------+
0 голосов
/ 21 февраля 2020
declare @a decimal(9, 2);
declare @b decimal(9, 2);
declare @c decimal(9, 2);

set @a = 150.50
set @b = 19
set @c = 100

select @a * @b / @c as result
,CAST(ROUND(@a * @b / @c, 2) as decimal(9,2)) as rounded
0 голосов
/ 21 февраля 2020

Не используйте float, но точный тип данных, такой как decimal ():

declare @a decimal(19,5);
declare @b decimal(19,5);
declare @c decimal(19,5);
set @a = 150.50;
set @b = 19;
set @c = 100;
select @a * @b / @c as result
,ROUND(@a * @b / @c, 2) as rounded

, что приводит к

result  rounded
28.595000   28.600000
...