| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Ruby On Rails > Строку в число |
| Автор: Лена 25.12.2009, 12:00 |
| Есть код: <span class="price"><%= (product.price) %></span> Подскажите как умножить product.price например на число 8.10 и вывести результат в span Пробовала вставить метод eval, но что-то не получается... |
| Автор: source777 25.12.2009, 15:55 | ||
| А product.price - это строка? По теме:
|
| Автор: Лена 25.12.2009, 16:55 |
Определена так: add_column :products, :price, :decimal, :precision => 8, :scale => 2, :default => 0 Но когда я по своему разумению написала так: <span class="price"><%= (product.price) * 8 %></span> Я получила восемь раз вывод цены на сайте. |
| Автор: Лена 25.12.2009, 18:48 |
| А как быть при такой ситуации: class StoreController < ApplicationController before_filter :poisk *************************** def poisk @curs = Back.find(:first, :order => 'id desc') end Попытка написать так: <td><span class="price"><%= @curs * (product.price) %> гр.</span></td> приводит к ошибке: undefined method `*' for #<Back:0x476d4ec @attributes={"id"=>"13", "course"=>"8.10"}> Добавлено через 10 минут и 40 секунд А так: <td><span class="price"><%= (product.price) * @curs %> гр.</span></td> Back can't be coerced into BigDecimal |
| Автор: Лена 25.12.2009, 19:23 |
Работает! Спасибо! Для моего варианта из-за приведения типов, пришлось написать так: <td><span class="price"><%= (product.price * @curs.course.to_f) %> гр.</span></td> Дело в том, что изначально в course планировалось хранить курс и буквы типа: 8.10 гр. Теперь там храниться просто 8.10, поэтому @curs.course.to_f, чтобы не переделывать таблицу в базе Добавлено через 4 минуты и 46 секунд А не подскажите, функцию, которая могла бы отбросить дробную часть и округлить число в этом выражении: <td><span class="price"><%= h(product.price * @curs.course.to_f) %> гр.</span></td> |
| Автор: source777 25.12.2009, 19:42 | ||||
Ну так round, ясное дело. Кстати, зачем тебе вызов h в данном случае? <%= (product.price * @curs.course.to_f).round %>
Странное решение, у тебя там много валют что-ли? В чём сложность переделать таблицу? См. http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column |
| Автор: Лена 25.12.2009, 20:01 | ||||
Cпасибо работает! h вставляю, так как в книге пугают - вставлейте везде где только можно метод h
У меня там одна валюта, просто модернизацию базы я всегда пытаюсь оттянуть как можно подальше. Очень не люблю этот процесс. Хотя на будущий проект (если он будет), понимаю, что лучше переделать столбик, чем писать to_f Сейчас все работает как надо, спасибо! |
| Автор: source777 25.12.2009, 20:09 | ||
Ну ты хоть запомнила его назначение? h - это сокращение от html_escape, что ты в числе экранировать собралась? |
| Автор: Лена 25.12.2009, 20:28 | ||
Понятно. Это я автоматом расставляла. |
| Автор: Лена 25.12.2009, 22:09 |
А есть ли функция, которая не округляла, а просто убирала дробную часть или хотябы всегда округляла в меньшую сторону? 123.2=123 123.8=123 |
| Автор: source777 25.12.2009, 22:21 | ||
floor округляет в меньшую сторону ceil - в большую to_i убирает дробную часть |
| Автор: Лена 25.12.2009, 22:26 |
Большое спасибо, попробую. Купила себе книжку: http://www.books.ru/shop/books/520674 но толком нужную информацию в ней не нахожу. Спасибо форуму! |
| Автор: source777 25.12.2009, 23:41 | ||
Ну тут у тебя 2 варианта: 1) прочитать всю книгу по порядку, а затем с легкостью вспоминать какая инфа там есть, а какой нет. 2) пользоваться предметным указателем: Числа > с плавающей точкой > округление > стр. 160 |
| Автор: Лена 26.12.2009, 00:59 | ||
Ну а где там описание методов floor - в меньшую и ceil - в большую |
| Автор: source777 26.12.2009, 13:56 | ||
Описания там нет, но в примере floor всё-таки используется. Просто книга имеет вводящий в заблуждение перевод названия "Программирование на языке Ruby", т.е. можно подумать что это учебник, но в оригинале она называется "The Ruby Way". Поэтому в ней прежде всего показано, чем Ruby отличается от других языков программирования. А уж названия функций для округления везде одинаковы, что в С++, что в Delphi, что в C#, что в Python, что в Ruby. Поэтому на это акцент не делается. |
| Автор: Лена 26.12.2009, 15:13 |
| Кстати и в этой книге нет этой информации: http://www.books.ru/shop/books/565628 но есть форум, а это, как выяснилось, лучше книг. |