Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строку в число 
V
    Опции темы
Лена
Дата 25.12.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Есть код:
<span class="price"><%= (product.price) %></span>
Подскажите как умножить product.price например на число 8.10 и вывести результат в span
Пробовала вставить метод eval, но что-то не получается...
PM MAIL   Вверх
source777
Дата 25.12.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



А product.price - это строка?  smile 

По теме:
Код

8.1 * "24.7".to_f  # => 200.07



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Лена
Дата 25.12.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Цитата(source777 @  25.12.2009,  15:55 Найти цитируемый пост)
А product.price - это строка


Определена так:
add_column :products, :price, :decimal, :precision => 8,
               :scale => 2, :default => 0

Но когда я по своему разумению написала так: 
<span class="price"><%= (product.price) * 8 %></span>
Я получила восемь раз вывод цены на сайте. smile 
PM MAIL   Вверх
Лена
Дата 25.12.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



А как быть при такой ситуации:
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

PM MAIL   Вверх
source777
Дата 25.12.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(Лена @  25.12.2009,  16:55 Найти цитируемый пост)
Но когда я по своему разумению написала так: 
<span class="price"><%= (product.price) * 8 %></span>
Я получила восемь раз вывод цены на сайте. smile  

Странный баг, (product.price) интерпретируется как строка.  smile 
Попробуй <%= (8*product.price) %>

Добавлено через 2 минуты и 12 секунд
Цитата(Лена @  25.12.2009,  18:48 Найти цитируемый пост)
Попытка написать так:
<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

Ну так у тебя @curs - это объект типа Back. Кстати, странное название...
Поэтому должно быть:
<%=  @curs.course * product.price %>


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Лена
Дата 25.12.2009, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Цитата(source777 @  25.12.2009,  19:02 Найти цитируемый пост)
Попробуй <%= (8*product.price) %>


Работает!  smile 

Цитата(source777 @  25.12.2009,  19:02 Найти цитируемый пост)
<%=  @curs.course * product.price %> 


Спасибо!
Для моего варианта из-за приведения типов, пришлось написать так:
<td><span class="price"><%=  (product.price * @curs.course.to_f) %> гр.</span></td>

Дело в том, что изначально в course планировалось хранить курс и буквы типа: 8.10 гр. Теперь там храниться просто 8.10, поэтому @curs.course.to_f, чтобы не переделывать таблицу в базе  smile

Добавлено через 4 минуты и 46 секунд
А не подскажите, функцию, которая могла бы отбросить дробную часть и округлить число в этом выражении:
<td><span class="price"><%=  h(product.price * @curs.course.to_f) %> гр.</span></td>

Это сообщение отредактировал(а) Лена - 25.12.2009, 19:23
PM MAIL   Вверх
source777
Дата 25.12.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(Лена @  25.12.2009,  19:23 Найти цитируемый пост)
А не подскажите, функцию, которая могла бы отбросить дробную часть и округлить число в этом выражении:
<td><span class="price"><%=  h(product.price * @curs.course.to_f) %> гр.</span></td>

Ну так round, ясное дело. Кстати, зачем тебе вызов h в данном случае?
<%= (product.price * @curs.course.to_f).round %>

Цитата(Лена @  25.12.2009,  19:23 Найти цитируемый пост)
Дело в том, что изначально в course планировалось хранить курс и буквы типа: 8.10 гр. Теперь там храниться просто 8.10, поэтому @curs.course.to_f, чтобы не переделывать таблицу в базе  smile

Странное решение, у тебя там много валют что-ли? В чём сложность переделать таблицу? См. change_column


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Лена
Дата 25.12.2009, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Цитата(source777 @  25.12.2009,  19:42 Найти цитируемый пост)
Ну так round, ясное дело. Кстати, зачем тебе вызов h в данном случае?


Cпасибо работает! 
h вставляю, так как в книге пугают - вставлейте везде где только можно метод h smile 

Цитата(source777 @  25.12.2009,  19:42 Найти цитируемый пост)
Странное решение, у тебя там много валют что-ли? В чём сложность переделать таблицу? См. change_column 


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

Сейчас все работает как надо, спасибо!  smile 

PM MAIL   Вверх
source777
Дата 25.12.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(Лена @  25.12.2009,  20:01 Найти цитируемый пост)
h вставляю, так как в книге пугают - вставлейте везде где только можно метод h smile 

Ну ты хоть запомнила его назначение? 
h - это сокращение от html_escape, что ты в числе экранировать собралась?  smile 


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Лена
Дата 25.12.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Цитата(source777 @  25.12.2009,  20:09 Найти цитируемый пост)
h - это сокращение от html_escape, что ты в числе экранировать собралась? 


Понятно. Это я автоматом расставляла. smile 
PM MAIL   Вверх
Лена
Дата 25.12.2009, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Цитата(source777 @  25.12.2009,  19:42 Найти цитируемый пост)
<%= (product.price * @curs.course.to_f).round %>


А есть ли функция, которая не округляла, а просто убирала дробную часть или хотябы всегда округляла в меньшую сторону?
123.2=123
123.8=123


PM MAIL   Вверх
source777
Дата 25.12.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(Лена @  25.12.2009,  22:09 Найти цитируемый пост)
А есть ли функция, которая не округляла, а просто убирала дробную часть или хотябы всегда округляла в меньшую сторону?

floor округляет в меньшую сторону
ceil - в большую
to_i убирает дробную часть

Это сообщение отредактировал(а) source777 - 25.12.2009, 22:24


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Лена
Дата 25.12.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Цитата(source777 @  25.12.2009,  22:21 Найти цитируемый пост)
floor - в меньшую
ceil - в большую


Большое спасибо, попробую. Купила себе книжку: http://www.books.ru/shop/books/520674 но толком нужную информацию в ней не нахожу. smile 
Спасибо форуму!  smile 
PM MAIL   Вверх
source777
Дата 25.12.2009, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(Лена @  25.12.2009,  22:26 Найти цитируемый пост)
Купила себе книжку: http://www.books.ru/shop/books/520674 но толком нужную информацию в ней не нахожу. 

Ну тут у тебя 2 варианта:
1) прочитать всю книгу по порядку, а затем с легкостью вспоминать какая инфа там есть, а какой нет.
2) пользоваться предметным указателем: Числа > с плавающей точкой > округление > стр. 160  smile 


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Лена
Дата 26.12.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: нет
Всего: 11



Цитата(source777 @  25.12.2009,  23:41 Найти цитируемый пост)
2) пользоваться предметным указателем: Числа > с плавающей точкой > округление > стр. 160    


Ну а где там описание методов floor - в меньшую и ceil - в большую smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.0955 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.