Почему мой float отображается как 0 в postgresql

Один из моих столбцов process_size содержит значение 800089856 в bytes.

Мой SQL-запрос говорит

select ((process_size*11/(1024*1024*1024))*100)/(4*3600) as Avg_wk_sum from instances where wk_id = 2

Но вместо значения с плавающей запятой он показывает 0.

Я даже пробовал явное приведение

select ((process_size*11/(1024*1024*1024))*100)/(4*3600) :: float as Avg_wk_sum from instances where wk_id = 2

Что я делаю неправильно? Как я могу получить значение с плавающей запятой?

0
0
129
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Все значения в вашем операторе являются целыми числами, поэтому фактическое деление / умножение выполняется с использованием целых чисел, что дает 0. Затем вы преобразуете результат (0) в число с плавающей запятой, которое ничего не меняет.

Вы должны преобразовать process_size в число с плавающей запятой, тогда все последующие операции будут выполняться с использованием чисел с плавающей запятой.

select ((process_size::float*11/(1024*1024*1024))*100)/(4*3600)

Однако, если вам важны точные результаты, вам следует избегать приблизительных типов данных, таких как float, и использовать вместо них numeric.

Поплавок работает. Но если попробовать process_size::numeric * 11.. снова возвращается к 0. Как пользоваться тем же?

StrugglingCoder 10.09.2018 09:15

@StrugglingCoder: у меня ::numeric работает: rextester.com/YDECO92680

a_horse_with_no_name 10.09.2018 09:17

Другие вопросы по теме