1

Хорошо ... Я думаю, что мне не хватает чего-то очень очевидного здесь, но я не смог сам Google через это решение. У меня есть два простых метода рельсов, которые вычисляют количество голосов и голосов. Они всегда будут возвращать часть, потому что я пытаюсь показать процент (up_vote_count/votal_vote_count). Я открываю консоль рельсы и запустить следующее:Вычисление простого десятичного числа в консоли rails с использованием postgresql

y = @somespecificrecord 

тогда ...

y.up_vote_count 

Эта функция возвращает 1, как ожидается,

y.down_vote_count 

Эта функция возвращает 1, как ожидается,

y.total_vote_count 

Это возвращает 2 как есть ожидается.

Однако, когда я бегу в консоли ...

y.up_vote_count/y.total_vote_count

Это возвращает 0, когда он должен вернуться .50. Я читал о поплавков/целых чисел/знаков после запятой, и т.д., и я вижу это в схеме на модели я работаю с:

t.float "value", default: 0.0 

Это моя проблема ... и если это так, что делать Я должен сделать это, чтобы позволить мне сделать простую формулу, подобную приведенной выше в консоли rails, которая вернет правильное десятичное число, округленное до 2 цифр (т. Е. В этом случае выше .50). Я не знаю, хочу ли я запускать какие-либо миграции для изменения типов данных, потому что это драгоценный камень (& как новичок. Я стараюсь держаться подальше от настройки кода из любых драгоценных камней, которые я использую). Есть ли другой способ? что-то маленькое, я скучаю, надеюсь?

UPDATE: Я учусь десятичные медленнее, чем поплавки также, так есть ли способ сделать это с продолжать использовать t.float «значение», по умолчанию: 0.0

спасибо за любую помощь.

ответ

1
1/2 = 0.5 

С целыми числами это округлить до 0

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

y.up_vote_count/y.total_vote_count.to_f 
+1

то ты да человек, Iceman. благодаря, – BB500

1

Float

объекты Float представляет неточные действительные числа с использованием двойной точности родного Архитектурной с плавающей точкой представления.

Плавающая точка имеет другую арифметику и является неточным числом.

его важно знать, если вы разделите 2 номера отверстий, вы получите номер отверстия. если вы ищете десятичное вы должны сначала преобразовать число в десятичной или «поплавком», как этот

up_votes = y.up_vote_count.to_f 
total_vote = y.down_vote_count.to_f 

(up_votes/total_vote) * 100.0 

Я надеюсь, что это помогает