Как получить результат float путем деления двух целочисленных значений?


Я хотел бы указать количество десятичных цифр, когда я делаю деление между 2 целыми числами, такими как:

select 1/3

, который в настоящее время возвращает 0. Я хотел бы его вернуть 0,33.

что-то типа:

select round(1/3, -2)

но это не сработает. Как я могу достичь желаемого результата?

8 119

8 ответов:

предложения от stb и xiowl прекрасны, если вы ищете константу. Если вам нужно использовать существующие поля или параметры, которые являются целыми числами, вы можете сначала привести их к плаванию:

SELECT CAST(1 AS float) / CAST(3 AS float)

или

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)

потому что SQL Server выполняет целочисленное деление. Попробуйте это:

select 1 * 1.0 / 3

это полезно, когда вы проходите целых числа в качестве параметров.

select x * 1.0 / y

нет необходимости бросать их обоих. Тип данных результата для деления всегда один с более высоким тип данных приоритет. Таким образом, решение должно быть:

SELECT CAST(1 AS float) / 3

или

SELECT 1 / CAST(3 AS float)

использовать

select 1/3.0

это сделает работу.

может быть немного поздно, но понимают, что CASTна FLOAT не допускается в MySQL и вызовет ошибку при попытке CAST(1 AS float) как говорится в MySQL dev.

обходной путь к этому является простым в MySQL. Просто сделай

(1 + 0.0)

затем использовать ROUND для достижения определенного числа десятичных знаков, как это:

ROUND((1+0.0)/(2+0.0), 3)

приведенный выше SQL делит 1 на 2 и возвращает float до 3 десятичных знаков, как в нем было бы 0.500.

похоже, этот трюк работает в SQL Server и короче (на основе предыдущих ответов)

SELECT 1.0*MyInt1/MyInt2

или:

SELECT (1.0*MyInt1)/MyInt2

использовать

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

здесь в этом sql сначала преобразуется в float или умножается на 1.00 .Какой выход будет число с плавающей точкой.Здесь я рассматриваю 2 десятичных знака. Вы можете выбрать то, что вам нужно.

Если ты пришел сюда (как и я), чтобы найти решение для целочисленное значение, вот ответ:

CAST(9/2 AS UNSIGNED)

возвращает 5