Странный результат при делении двух чисел - PullRequest
0 голосов
/ 24 марта 2020

Этот код:

DECLARE @remise decimal(10,2) 
set @remise = 10 / 100
select @remise

приводит к 0,00. Почему это не приводит к 0,10, что я ожидал?

Ответы [ 2 ]

3 голосов
/ 24 марта 2020

У вас есть два целых числа - 10 и 100. Поэтому при рассмотрении оператора деления система решает выполнить целочисленное деление. Целочисленное деление игнорирует любой остаток и не может привести к десятичному результату, поэтому результат равен 0.

. Неважно, что вы впоследствии планируете сохранить результат в decimal(10,2).

Один способ решить эту проблему - использовать нецелое число в качестве одного из входных данных для деления. Если вы не используете литералы, обычно это можно сделать, умножив один из входных данных на 1.0:

DECLARE @remise decimal(10,2)
set @remise = (10 * 1.0) / 100
select @remise
1 голос
/ 24 марта 2020

Это SQL Сервер?

10 и 100 оба являются целыми числами. Целочисленное деление 10/100 приводит к 0. Если вы положите это 0 в десятичную переменную, ноль все еще остается нулем.

Вы хотите

DECLARE @remise decimal(10,2)
set @remise = 10.0 / 100.0
select @remise
...