Member 10028394 Ответов: 2

SQL сервер от 0,00 до 0,50 нельзя считать 0.50 почему


in sql table two rows are given below
StartWeight    EndWeight      Charges    AddWeight     AddCharges
0.00           0.50           50            0              0
0.60           1.00           100           1             70


declare @Weight decimal
набор @Вес=0.5
запрос SELECT сборы из таблицы, где @весе между StartWeight и EndWeight

Первый вопрос) это когда @Weight меньше или равен 0,4 он показывает 50 а когда вес равен 0,50 то он показывает 100 в то время как я хочу показать 50 на 0,5

Второй выпуск) то же самое, когда @weight составляет от 0,6 до 1,4, он показывает 100, в то время как я хочу показать 100 только между 0,60 и 1,00, а не больше 1,00

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

declare @weight decimal,@result decimal
set @weight=0.50
set @result=(select Charges from [Customer].[CustomerCharges] where CustomerAccountID=1 and @weight between StartWeight and EndWeight)
select @result as Result

Результат=100

RedDk

Выберите @@MAX_PRECISION как максимум точности'

"p" устанавливает точность
"s" устанавливает шкалу

десятичное число[(p[ ,s])]

или

числовой[(p[ ,s])]

Как может кто-то usg SQL BOL не знать этого?

Member 10028394

Я не мог понять вашего ответа, пожалуйста, приведите какой-нибудь пример

Karthik_Mahalingam

Совет: используйте  Ответить  кнопка, чтобы отправить комментарии/запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

2 Ответов

Рейтинг:
6

Jörgen Andersson

Когда вы объявляете переменную как десятичную без указания точности и масштаба она будет иметь значение по умолчанию decimal(18,0)
Так что когда вы в следующем ряду set @weight=0.40 он будет округлен до числа, которое соответствует переменной. В этом случае 0.

Поэтому измените первое объявление на десятичное с тем же размером, что и начальный и конечный вес.

Как например: declare @weight decimal(5,2),@result decimal(5,2)


Member 10028394

Спасибо братан

Рейтинг:
1

RossMW

Видеть Точность, масштаб и длина (Transact-SQL) | Microsoft Docs[^]

В SQL вы определяете точность и масштаб числового значения в базе данных. например, numeric(18,0) означает, что вы можете хранить 18-значное число, но без десятичных знаков, где as Numeric(18,5) позволит использовать 5 десятичных пробелов. Вычисления будут выполняться по умолчанию в масштабах полей, если вы явно не преобразуете их в другую точность / размер шкалы.

т.е.

cast([StartWeight] as numeric(18,5))