octavia81 Ответов: 4

Sql усечение десятичной дроби без роудинга


как мы получаем десятичные 2 знака без округления в sql
для простого расчета,
(3990-460)/95 = 35.2 но sql дает 36.
как мне это сделать?

Что я уже пробовал:

попробовал круглый, напольный. это не работает

Herman<T>.Instance

Какой тип базы данных?

4 Ответов

Рейтинг:
24

OriginalGriff

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

DECLARE @A DECIMAL(7,2) = 3990
DECLARE @B DECIMAL(7,2) = 460
DECLARE @C DECIMAL(7,2) = 95
DECLARE @VAL DECIMAL(7,2) = (@A - @B) / @C

DECLARE @IA INTEGER = 3990
DECLARE @IB INTEGER = 460
DECLARE @IC INTEGER = 95
DECLARE @IVAL DECIMAL(7,2) = (@IA - @IB) / @IC
SELECT (@A - @B) /  @C, (@IA - @IB) /  @IC, @VAL, @IVAL, (3990 - 460) / 95

(No column name)  (No column name)  (No column name)  (No column name) 
 (No column name)
37.1578947368     37                37.16             37.00             37

Так что Проверьте свои типы ценностей! На первый взгляд, вы используете неправильный тип столбца, но мы не можем проверить вашу БД - у нас нет к ней никакого доступа.


Рейтинг:
1

CPallini

Цитата:
(3990-460)/95 = 35.2
Обратите внимание, что в результате (3990-460)/95 является 37,15789...

Во всяком случае, в зависимости от вашего фактического SQL платформа, может быть TRUNCATE или TRUNC функция доступна (см., например Транк оракула (число)[^]).


Рейтинг:
0

Herman<T>.Instance

Если вы используете SQL Server.

SELECT FORMAT((3990-460)/CAST(95 as Decimal), 'N2');


Jörgen Andersson

Я бы не стал использовать формат, так как он изменяет тип на строку.
Лучше использовать круглый((3990-460)/чугун(95 как в десятичной системе),2,1) или бросить((3990-460)/чугун(95 качестве десятичной) как decimal(7,2))

Рейтинг:
0

octavia81

Спасибо всем. одна вещь, которую следует принять к сведению для тех, кто сталкивается с проблемой, как я, - это ваш тип данных таблицы БД и тип данных SP должны быть сопоставлены. :)