SQL Server ROUND не работает - PullRequest
0 голосов
/ 12 июня 2018

У меня есть таблица, в которой один столбец равен Price (decimal(18,9)), а другой - Volume (bigint).

Я умножаю оба значения и затем применяю функцию round, но ничего не получается.

Я хочу, чтобы он был с точностью до 2 десятичных знаков.Как это сделать?

SELECT 
    CAST((Price * Volume) AS decimal(38,2)) test1, 
    ROUND((Price * Volume), 2) 'VolumePrice',  
    CONVERT(DOUBLE PRECISION, (Price * Volume)) 'test2' 
FROM a

Табличные значения выглядят примерно так:

    Price           Volume
    -------------------------
    63.380000000    131729
    63.380000000     61177
    44.860000000    246475
    44.860000000    246475
    44.860000000     63937
    97.990000000     84620
    191.650000000   438821

Я хочу просто умножить цену на объем, чтобы получить общую сумму.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Когда оператор объединяет два выражения разных типов данных, правила для приоритета типа данных указывают, что тип данных с более низким приоритетом преобразуется в тип данных с более высоким приоритетом

источник : Документы MSDN

В SQL Server порядок приоритетов для рассматриваемых типов данных:

  1. десятичный
  2. bigint

Таким образом, bigint преобразуется в неявно преобразуемый в десятичный.

Если вам нужны желаемые результаты, вам нужно просто сделать

SELECT 
VolumePrice= cast(Price * Volume as decimal(18,2) ) 
FROM a

См. Рабочую демонстрацию

0 голосов
/ 12 июня 2018

ROUND() просто изменяет десятичное значение вверх или вниз, не изменяет точность типа данных.

Вы хотите преобразовать в DECIMAL со шкалой 2.

SELECT 
    CONVERT(DECIMAL(18,2), Price * Volume) AS DecimalConversion
FROM 
    A

Преобразование десятичной дроби старшей шкалы (Price * Volume) в младшую автоматически округляетпоследняя цифра:

SELECT 
    CONVERT(DECIMAL(18,2), '1.901999'), -- 1.90
    CONVERT(DECIMAL(18,2), '1.909999'), -- 1.91
    CONVERT(DECIMAL(18,2), '1.905999'), -- 1.91
    CONVERT(DECIMAL(18,2), '1.904999')  -- 1.90
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...