`
cvu
  • 浏览: 106484 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

amount_in_yuan

阅读更多
Agile Web Development On Rails书中建议金额用integer,单位是cents,好处XX。但是每个金额的field都要写两个method:amount_in_dollar和amount_in_dollar=,不如写个类似于attr_accessor的meta program,一次搞定。两段例子如下:

# config/enviorment.rb
class Module
    def amounts_in_yuan(*args)
      args.each do |sym|
        class_eval %{
          def #{sym}_in_yuan
            amt = self.#{sym} || 0
            sprintf("¥%01.2f", amt.to_f/100)
          end

          def #{sym}_in_yuan=(amt)
            amt.sub!('¥', '') if amt.starts_with?('¥')
            self.#{sym} = (amt.to_f * 100).to_i
          end
        }
      end
    end
end


# db/migrate/001_create_products.rb
class CreateProducts < ActiveRecord::Migration
  def self.up
    create_table :products do |t|
      t.column :price, :integer    # 金额定义为integer,单位为分
      t.column :cost, :integer
      ...
    end
  end
  ... 
end


# app/models/product.rb
class Product < ActiveRecord::Base
  amounts_in_yuan :price, :cost
  ...
end


<%# app/views/products/edit.rhtml %>
...
单价:<%= f.text_field :product, :price_in_yuan %>元
成本:<%= f.text_field :product, :cost_in_yuan %>元
...
分享到:
评论
2 楼 cvu 2007-01-24  
看到了,谢谢!
add_column :products, :price, :decimal, :precision => 8, :scale => 2
1 楼 gigix 2007-01-24  
看那本书第二版。现在提倡的做法是用一个BigDecimal字段来保存价格。

相关推荐

    predict_dnd_amount_python预测_业绩预测_回归分析_

    在本项目中,"predict_dnd_amount_python预测_业绩预测_回归分析_" 是一个使用Python进行季度业绩预测的实践案例,主要涉及了数据预测、业务分析以及统计学中的回归分析技术。下面将详细阐述这些关键知识点。 首先...

    bin_tree.zip_In Time

    A data structure implemented via a linked list. Useful for finding elements in a small amount of time.

    An_Analytic_Data_Engine_for_Visualization_in_Tableau_1.pdf

    Inspired by the large amount of recent research on column-oriented stores, we have developed a new specialized analytic data engine tightly-coupled with the Tableau data visualization system. The ...

    随机森林分类器测试数据

    csv表格中为随机森林分类器的测试数据,属性:Disbursed Existing_EMI ID Loan_Amount_Applied Loan_Tenure_Applied Monthly_Income Var4 Var5 Age EMI_Loan_Submitted_Missing Interest_Rate_Missing Loan_Amount_...

    Amount-in-words.rar_site:en.pudn.com

    标题中的"Amount-in-words.rar"表明这是一个与金额表示相关的压缩文件,可能包含程序、代码或文本文件,用于将数字金额转换成中文大写。"site:en.pudn.com"标签暗示这个资源可能来源于一个英文版的PUDN(Programming...

    jQuery的进度条插件BootstrapProgressbar.zip

     }, amount_format: function(amount_part, amount_total) { return amount_part ' / ' amount_total; },  update: $.noop,  done: $.noop,  fail: $.noop };transition_delay$(document).ready...

    UNION ALL 的使用方法

    WHERE B.CLIENT_CD = W_IN_CLIENT_CD UNION ALL SELECT C.TRD_NO FROM XXXXXXXXX C WHERE C.CLIENT_CD = W_IN_CLIENT_CD ) D WHERE A.TRD_NO = D.TRD_NO AND A.CLIENT_CD = W_IN_CLIENT_CD AND A.RESULT ...

    抽水机数据挖掘水表:预测水泵是否工作

    为您提供了以下有关水位的信息: amount_tsh-总静压头(可用于水位的水量) date_recorded-输入行的日期资助者-谁为井提供了资金gps_height-井的高度安装程序-安装井的组织经度-GPS坐标纬度-GPS坐标wpt_name-水位...

    socket_socket_简单的socket代码_

    while amount_received &lt; amount_expected: data = client_socket.recv(16) amount_received += len(data) print('收到:', data.decode(), end='') finally: # 关闭连接 client_socket.close() ``` 客户端...

    Python LC Loan贷款数据集 文本字符串预处理转换 方差阈值 pearson相关系数 柱状图 2D 3D 散点图统计图

    amnt funded_amnt funded_amnt_inv term int_rate installment grade sub_grade hardship_payoff_balance_amount hardship_last_payment_amount disbursement_method debt_settlement_flag debt_settlement_flag_...

    大型数据库技术与应用上机资料.doc

    例如,要在SH模式下的`sales`表中查询以'1001'开头的`AMOUNT_SOLD`,可以使用`LIKE`操作符配合通配符,如:`SELECT AMOUNT_SOLD FROM sales WHERE AMOUNT_SOLD LIKE '1001%'`。 在学生选课业务的场景中,连接查询是...

    money-amount.rar_Money_ Money_ Money

    本文将深入探讨一个名为"money-amount.rar"的压缩包文件,该文件包含了使用MATLAB进行图像处理以计算图像中货币数量的代码实例,其主要标签为"money money money"。 MATLAB是一种强大的数学计算和数据分析工具,...

    abap常用function

    CLOI_PUT_SIGN_IN_FRONT 此函数将字符串末尾的负号移到字符串开头,适用于数值格式调整,确保数值的正确显示。 **参数**: - `value`:待调整的字符串。 **异常**: - `OTHERS`:处理过程中的其他错误。 ### ...

    二维图像展成一维向量后的随机置乱.zip_3RY_amount898_图像加解密_图像置乱_置乱

    通过将二维图像展成一维向量进行随机置乱实现图像加解密

    Simple Currency Converter using Tkinter in Python

    amount = float(amount_entry.get()) from_currency = from_currency_var.get() to_currency = to_currency_var.get() # 发送请求获取汇率 response = requests.get(f...

    MySQL:The used SELECT statements have a different number of columns

    在错误案例中,我们尝试连接`store_in_detail`和`store_out_detail`两个表来展示商品id为1345的入库和出库情况。错误的SQL代码如下: ```sql SELECT a.quantity AS in_quantity, a.price AS in_price, (a.quantity ...

    python socket编程实例(服务端及客户端)

    while amount_received &lt; amount_expected: data = sock.recv(1024) amount_received += len(data) print('接收到数据:', data.decode()) finally: # 关闭连接 sock.close() ``` 客户端通过`sock.sendall()...

    SAP_IDES安装后初始化部分学习数据

    例如,你可以设置i_amount_spfli和i_amount_sflight为100,表示要生成100条spfli和sflight表的记录。 4. 点击“测试运行”按钮,然后执行“运行”,系统将根据指定数量生成测试数据。 5. 最后,这些数据将被插入到...

    Oracle P/L SQL实现发送Email、浏览网页等网络操作功能

    Member Function ODCIAggregateTerminate(self In Out strcat_type,ReturnValue Out varchar2,flags in Number) Return Number ); / --2. 创建类型体 Create Or Replace Type Body Strcat_type Is Static ...

    personal--amount.rar_personal

    本项目"personal--amount.rar_personal"是一个使用C++编写的个人账户管理系统,旨在帮助用户管理自己的财务信息,提供了一个简洁而实用的工具。 首先,我们来看这个系统的功能设计。一个基本的账户管理系统通常包括...

Global site tag (gtag.js) - Google Analytics