Почему мой float отображается как 0 в postgreSQL - PullRequest
0 голосов
/ 10 сентября 2018

Один из моих столбцов 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

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

1 Ответ

0 голосов
/ 10 сентября 2018

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...