Как инициализировать примитив и добавить к нему? - PullRequest
0 голосов
/ 15 января 2012

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

amt = 0.0

5.times do
  amt = amt + ("%.2f" % (item.price * 0.05)) 
end

Вот ошибка:

String can't be coerced into Float

РЕДАКТИРОВАТЬ:

Я изменил 1.times do.Я адаптировал свой код так, чтобы он был более читабельным, 1.times не было в моем реальном коде.

Ответы [ 2 ]

1 голос
/ 15 января 2012

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

Чтобы использовать BigDecimal, в вашем запросе необходимо указать «bigdecimal»application.rb

Тогда, что вы хотите:

amt = BigDecimal.new("0")

1.times do
  price = BigDecimal.new(item.price.to_s)
  factor = BigDecimal.new("0.05")
  amt += (price * factor).round(2)
end

amt
0 голосов
/ 15 января 2012

Да, извините всех. Я новичок в Ruby, поэтому я не знал, что это проблема, но проблема была вызвана "% .2f". (Хотя это и не имеет отношения к этому вопросу, он конвертирует сумму в два десятичных знака точности.) Глупая ошибка!

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