我应该如何确保以一定精度保存浮点值,包括多余的零?

时间:2014-01-06 07:44:06

标签: ruby-on-rails activerecord

我正在为我的iOS应用程序制作JSON API,并且(即使我在客户端上对其进行格式化)我想以我们在客户端上看到的格式存储我的lat / long数据。

我目前的解决方案

class Location < ActiveRecord::Base
    before_save :format_coordinate_precision

    def format_coordinate_precision
    lati = "%.8f" % self.latitude
    self.latitude = lati.to_f
end

给我一​​个保证8位数的精度,但省略了尾随零。此外,这似乎不是最具生产力的方法。有ActionView::Helpers::NumberHelper number_with_precision,但似乎是在.erb视图文件中使用。

1 个答案:

答案 0 :(得分:1)

您认为number_with_precision方法适用于视图是正确的,所有NumberHelper函数都是如此。但是,如果您愿意弯曲规则(这是一个完全不同的讨论),您可以通过明确地包含NumberHelper模块在​​视图之外调用这些函数:

include ActionView::Helpers::NumberHelper

number_with_precision(1234567890.314159, precision: 10)
#=> 1234567890.3141590000

通常,可以通过包含其辅助模块来调用各自层之外的辅助函数。虽然上面的例子似乎无害,但我建议谨慎导入帮助程序 - 在使用预期使用范围之外使用MVC函数通常违反了Rails惯例。