ошибка, когда я ввожу значение "45", я получаю "0.45e2" ruby на рельсах - PullRequest
0 голосов
/ 10 апреля 2020

Я не могу понять, почему, когда я ввожу 45, я получаю 0.45e2, в то время как любой жало, как штаны, работает нормально, у меня есть следующее html

<code><%= form_with(model: invoice, local: true) do |form| %>
  <% if invoice.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(invoice.errors.count, "error") %> prohibited this invoice from being saved:</h2>
      <ul>
        <% invoice.errors.full_messages.each do |message| %>
          <li><%= message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>
<center><h1>ΤΔΑ-ΤΙΜΟΛΟΓΙΟ-ΔΕΛΤΙΟΥ ΑΠΟΣΤΟΛΗΣ</h1></center>
<div align="right">

</div>

<pre>ID           CODE         DESCRIPTION  BASE CODE    QUANTITY     

1 Ответ

1 голос
/ 10 апреля 2020

Лучше избегать чисел с плавающей запятой полностью, когда имеешь дело с деньгами, и конвертировать, например, в центы (или как там называется наименьший номинал вашей валюты) для хранения. Если вы знаете, что вам когда-нибудь понадобится поддерживать только одну валюту, это будет просто. Конечно, вы все же хотите разрешить ввод и отображение цен в десятичной записи. Вот как я бы подошел к этому в вашей Invoice модели после создания новой price_cents et c. столбцы и перенос существующих данных:

  def price=(value)
    value = value.to_f if value.is_a? String
    self.price_cents = (value * 100).round
  end

  def price
    price_cents&.positive? ? price_cents / 100.0 : 0
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...