我在Oracle 11g数据库上使用Ruby 2.0.0和Rails 4.0.9。
我查询数据库以获取一对值[date,score]来绘制图表。 不幸的是,我的查询返回三元组,例如[日期,分数,某些东西],并且图表失败。
以下是查询:
@business_process_history = DmMeasure.where("period_id between ? and ? and ODQ_object_id = ?",
first_period_id, current_period_id, "BP-#{@business_process.id}").
select("period_day, score").order("period_id")
以下是控制台中的结果:
DmMeasure Load (1.2ms) SELECT period_day, score FROM "DM_MEASURES" WHERE (period_id between 1684 and 1694 and ODQ_object_id = 'BP-147') ORDER BY period_id
=> #<ActiveRecord::Relation [#<DmMeasure period_day: "20140811", score: #<BigDecimal:54fabf0,'0.997E2',18(45)>>,
#<DmMeasure period_day: "20140812", score: #<BigDecimal:54fa7e0,'0.997E2',18(45)>>, ...]
尝试格式化结果也会返回三元组:
@business_process_history.map { |bp| [bp.period_day, bp.score] }
=> [["20140811", #<BigDecimal:54fabf0,'0.997E2',18(45)>],
["20140812", #<BigDecimal:54fa7e0,'0.997E2',18(45)>], ...]
这是从哪里来的? 我该如何避免这种行为?
感谢您的帮助,
致以最诚挚的问候,
佛瑞德
答案 0 :(得分:0)
ruby BigDecimal只是表示数字的一种方式。
例如,如果你在rails控制台中玩它们:
> BigDecimal.new(1234)
=> #<BigDecimal:f40c6d0,'0.1234E4',9(36)>
第一部分,如您所见,有点像科学记数法,它包含有效数字和精确度。
要弄明白18(45)
是什么,我必须深入研究original c-code for the BigDecimal#inspect
method。
这是对该方法的评论:
/* Returns debugging information about the value as a string of comma-separated
* values in angle brackets with a leading #:
*
* BigDecimal.new("1234.5678").inspect ->
* "#<BigDecimal:b7ea1130,'0.12345678E4',8(12)>"
*
* The first part is the address, the second is the value as a string, and
* the final part ss(mm) is the current number of significant digits and the
* maximum number of significant digits, respectively.
*/
答案是:当前有效位数和最大有效位数