我最近在 Rails 中遇到了这个奇怪的错误。
class PaymentsController < ApplicationController
def new
@payment = current_user.payments.build(:invoice_id => params[:invoice_id])
@title = "Make payment"
end
end
class Payment < ActiveRecord::Base
attr_accessible :amount, :date, :invoice_id
after_initialize :set_amount
private
def set_amount
if new_record? && invoice.present?
self.amount ||= invoice.amount_payable
end
end
end
当我这样称呼这个动作时invoice
......
<%= link_to "Make payment", new_payment_path(:invoice_id => invoice.id) %>
...付款表单显示invoice
在下拉字段中预选正确(这是正确的)。
amount
在大约 90% 的情况下,付款的金额都是正确的。
但是,有时它不会填充amount_payable
数据库中的 2 位数字,而是填充一些其他奇怪的值,例如:
87.31999999999999
(87.32
SQLite数据库中存储的十进制类型值在哪里)
有人可以告诉我是什么导致了这个舍入错误或指出我正确的方向吗?
谢谢你的帮助。
顺便说一句,这是我的数据库架构:
create_table "invoices", :force => true do |t|
t.decimal "amount_payable", :precision => 8, :scale => 2
end