在Ruby on Rails中处理定点/精确小数的最佳方法

|| 因此,我正在使用Ruby On Rails创建一个时间跟踪应用程序,并将时间存储为代表小时数的数字。 因为任何超出0.01(36秒)小时的时间都是无关紧要的,所以我只需要2个小数位。 我正在使用带有浮点数作为列类型的MySQL数据库。尽管这在大多数情况下都有效,但我时不时会在浮点数的计算和取整方面出现错误。 我已经对我的选择进行了一些研究,发现很多人建议使用BigDecimal。由于我使用了大量使用计算的自定义数据库查询,因此我想知道更改列类型将如何影响此结果。它会将其存储为字符串或yaml,还是MySQL本身支持? 还是有一种等效的方法可以在Ruby / Rails中执行定点十进制算术运算。 我认为任何方法都将需要大量重构,如何最大程度地避免这种情况? 任何见解均表示赞赏。     
已邀请:
        MySQL确实具有内置的BigDecimal支持。 http://dev.mysql.com/doc/refman/5.1/zh-CN/precision-math-decimal-changes.html 我建议使用它;它在我的Rails应用程序中运行良好。允许数据库而不是应用程序来处理它使生活变得更轻松-您正在按照设计它们的方式使用抽象。 这是迁移代码:
change_column :table_name, :column_name, :decimal
参考:用于变更列的Rails迁移     
        与其将时间存储为代表小时数的数字,不如将其存储为代表增量为36秒(或者可能是秒)的数字。 您不需要十进制支持类型来进行定点运算,只需将业务逻辑相除即可得出小时数。     
        实际上,我们已经构建了一个时间跟踪应用程序(http://www.yanomo.com),并将所有时间存储为它们代表的小时数(以MySQL作为基础dbms)。对于列类型,我们使用DECIMAL(precision,scale)。在您的情况下,像DECIMAL(5,2)这样的事情会发生。在我们的业务逻辑(JAVA)中,我们使用BigDecimal。     

要回复问题请先登录注册