Когда вы используете только целые числа в делении, вы получите целочисленное деление. Когда вы используете (хотя бы одно) double или float, вы получите деление с плавающей запятой (и ответ, который хотите получить).
Так что вы можете
объявить одну или обе переменные как float / double
приведите одну или обе переменные к типу float / double.
Не приводите результат целочисленного деления к удвоению: деление уже было выполнено как целочисленное деление, поэтому числа после десятичной дроби уже потеряны.
Спасибо чувак. Ваш код помог мне ответить на этот вопрос - stackoverflow.com/questions/20532187/… Не могли бы вы сказать мне, как обрезать лишние нули, вызванные этим умножением? Спасибо.
Trojan.ZBOT
2
если вы объявите его как float или любой десятичный формат, он отобразит
0
только
Например:
declare @weight float;
SET @weight= 47 / 638; PRINT @weight
Выход: 0
Если вы хотите, чтобы результат был как
0,073667712
Например
declare @weight float;
SET @weight= 47.000000000 / 638.000000000; PRINT @weight
Хм, хорошо, я понял, но два числа, которые я хочу разделить, являются переменными, и, похоже, это не сработает, если в переменной не указано .0000.
Roch
поэтому вам нужно преобразовать как @ set1, так и @ set2 в float :)
anishMarokey
1
В SQL Server прямое деление на два целых числа возвращает целое число, даже если результатом должно быть число с плавающей запятой. Ниже приведен пример, чтобы объяснить это:
Ответы:
Либо объявите set1 и set2 как числа с плавающей запятой вместо целых чисел, либо преобразуйте их в числа с плавающей запятой как часть вычисления:
SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);
источник
Когда вы используете только целые числа в делении, вы получите целочисленное деление. Когда вы используете (хотя бы одно) double или float, вы получите деление с плавающей запятой (и ответ, который хотите получить).
Так что вы можете
Не приводите результат целочисленного деления к удвоению: деление уже было выполнено как целочисленное деление, поэтому числа после десятичной дроби уже потеряны.
источник
Потому что это целое число. Вам нужно объявить их как числа с плавающей запятой или десятичные дроби, или привести к таковым в вычислениях.
источник
Просто умножьте нижнюю часть деления на 1,0 (или на столько десятичных знаков, сколько хотите).
PRINT @set1 PRINT @set2 SET @weight= @set1 / @set2 *1.00000; PRINT @weight
источник
если вы объявите его как float или любой десятичный формат, он отобразит
только
Например:
declare @weight float; SET @weight= 47 / 638; PRINT @weight
Выход: 0
Если вы хотите, чтобы результат был как
Например
declare @weight float; SET @weight= 47.000000000 / 638.000000000; PRINT @weight
источник
В SQL Server прямое деление на два целых числа возвращает целое число, даже если результатом должно быть число с плавающей запятой. Ниже приведен пример, чтобы объяснить это:
--1-- declare @weird_number_float float set @weird_number_float=22/7 select @weird_number_float --2-- declare @weird_number_decimal decimal(18,10) set @weird_number_decimal=22/7 select @weird_number_decimal --3-- declare @weird_number_numeric numeric set @weird_number_numeric=22/7 select @weird_number_numeric --Right way declare @weird_number float set @weird_number=cast(22 as float)/cast(7 as float) select @weird_number
Только последний блок вернет 3,14285714285714. Несмотря на то, что второй блок определен с правильной точностью, результат будет 3.00000.
источник