Как я могу отобразить 2 десятичных знака (заполнение) на поплавке, даже если конечное число равно 0. Итак, если я суммирую только значения: cost в приведенном ниже примере, я бы хотел, чтобы он возвращал 23.00

items = [
    {customer: "John", item: "Soup", cost:("%.2f"% 8.50)}, 
    {customer: "Sarah", item: "Pasta", cost:("%.2f"% 12.00)}, 
    {customer: "John", item: "Coke", cost:("%.2f" % 2.50)}
]

ПРОБЛЕМА: Мне удалось отобразить стоимость: значения с двумя десятичными знаками. Однако результат возвращает «строку». Я пробовал ("% .2f"% 2.50) .to_f , но безуспешно. Мне нужен поплавок, чтобы я мог выполнить следующий код инъекции.

totalcost = items.inject(0) {|sum, hash| sum + hash[:cost]}

puts totalcost

При запуске этого для суммирования общей стоимости я получаю следующую ошибку, потому что я не могу успешно преобразовать строку в число с плавающей запятой. Невозможно преобразовать строку в целое число (TypeError)

1
Jake Metz 14 Мар 2018 в 07:13

2 ответа

Лучший ответ

Вы можете рассчитать сумму значений стоимости после преобразования ее в число (целое / плавающее).

totalcost  = items.map { |x| x[:cost].to_f }.sum

Значение totalcost можно отформатировать с помощью sprintf любым способом, который мы хотим отображать.

sprintf("%.2f", totalcost)

Надеюсь, это поможет !

2
Ashik Salman 14 Мар 2018 в 05:32

Hash [: cost] по-прежнему возвращает строку. вы можете просто покрыть его поплавком, прежде чем добавлять его к сумме

totalcost = items.inject(0) {|sum, hash| sum + hash[:cost].to_f}
0
Shani 14 Мар 2018 в 04:25