簡體   English   中英

當我輸入值“45”時出現錯誤,我在軌道上得到“0.45e2”ruby

[英]bug when i input value “45” i get “0.45e2” ruby on rails

我不明白為什么當我輸入 45 時我得到 0.45e2 而任何像褲子這樣的刺都可以正常工作我有以下 html

<%= 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     </pre>
<table style="border:2px solid black;"id="tableid">
<td><input  type="text" name="invoice[items][]" /></td>
<td><input  type="number" name="invoice[tax][]" /></td>
<td><input  type="number" name="invoice[discount][]" /></td>
<td><input  type="number" name="invoice[sum][]" /></td>
<td><input  type="number" name="invoice[price][]" /></td>
</tr>
</table>
<script type="text/javascript">
    var table = document.getElementById("tableid");
    table.addEventListener("keyup", function(event) 
    {
    if (event.keyCode === 18)
     {
            event.preventDefault();
            var rowid=table.rows.length-1;
            var row = table.insertRow(rowid+1);
            row.id = (rowid+1).toString();
            var cell0 = row.insertCell(0);
            var cell1 = row.insertCell(1);
            var cell2 = row.insertCell(2);
            var cell3 = row.insertCell(3);
            var cell4 = row.insertCell(4);
            cell0.innerHTML = "<input type='text'  size='8' name='invoice[items][]'></input>";
        cell1.innerHTML = "<input type='text'  size='8' name='invoice[tax][]'></input>";
        cell2.innerHTML = "<input type='text'  size='8' name='invoice[discount][]'></input>";
        cell3.innerHTML = "<input type='text'  size='8' name='invoice[sum][]'></input>";
        cell4.innerHTML = "<input type='text'  size='8' name='invoice[price][]'></input>";

      }
    });
</script>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

和我的 controller

    def invoice_params
      params.require(:invoice).permit({:items => []}, {:price => []}, {:tax => []}, {:discount => []}, {:sum => []})
    end

所以當我創建新項目時會發生這種情況

Invoice was successfully created.

Items: ["pants", "spoon"]

Price: [0.45e2, 0.2e1]

Tax: [0.45e2, 0.25e2]

Discount: [0.45e2, 0.2e2]

Sum: [0.45e2, 0.22e2]

Edit | Back

我應該告訴 ruby on rails tat params sum,tax,discoun 是數字還是類似的東西? 還是必須是保存參數的更好方法? 因為字符串工作正常

如果您將 t.numeric 更改為t.float也可以更新以解決問題

處理貨幣時最好完全避免浮點數,並轉換為例如美分(或任何您的貨幣的最小面額)進行存儲。 如果您知道您只需要支持一種貨幣,這將很簡單。 當然,您仍然希望允許通過十進制表示法輸入和顯示價格。 在創建新的price_cents等列並遷移現有數據之后,我將在您的Invoice model 中處理該問題:

  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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM