0
def main()

  myDB=DB.new('myUser','myPass','myDB')
  record = myDB.handle().select_one('select count(*) from things')
  printf "%10d" % record

end

主要()结果:30008428

我想将此值除以 24 以创建将每小时执行的批处理。这是漂亮的打印结果:

[#<BigDecimal:ac2fdf94,'0.30008428E8',8(12)>]

我很困惑如何实现这一目标。据我了解,“记录”是一个包含 BigDecimal 对象的数组。我试图做的记录[0].div(24) 也没有用。record.div(24) 也没有工作。

由于我现在花了很多时间来解决这个问题,我觉得我需要向社区寻求一点帮助。

提前致谢。

4

1 回答 1

1

DBI::Handle#select_one方法(我想它必须隐藏在您的DB模块后面)从数据库中返回一条记录。因为这一记录可能包含多个字段,所以它将记录作为数组返回。在这种情况下,只有一列 - 计数 - 因此计数值位于record[0].

我猜“漂亮打印”是指来自的输出p record,它是调试输出,而不仅仅是漂亮的打印。它相当于puts record.inspect。在这种情况下,它显示了一个数组( )内的单个对象( 中的所有内容)。#<...>[...]

对于BigDecimal对象,inspect返回一个给出类名的字符串BigDecimal;十六进制地址,ac2fdf94;当前值作为字符串,0.30008428E8;以及有效数字的当前(最大)数量,8 (12)

对您的问题的简短回答是您可能想写

count = record[0].to_i

然后使用count,这是正常的Fixnum,所以你的划分看起来像

per_hour = count / 24.0

30,008,428 的值正好在最大值之内Fixnum,这取决于您的机器字长,但可能是 2 30或超过 10 亿。即使你超过了这个值,Ruby 也会 - 主要是默默地 -Bignum为你转换为 a ,所以不会发生任何不好的事情。

于 2013-08-05T21:22:49.713 回答