如何在Ruby on Rails中将数字强制为10位小数?

时间:2011-02-11 22:43:44

标签: ruby-on-rails ruby

我的数据库中有纬度和经度值,小数点后10位:

+----+---------------+-----------------+
| id | lat           | lng             |
+----+---------------+-----------------+
| 55 | 34.4208305000 | -119.6981901000 |
| 56 | 30.2671530000 |  -97.7430608000 |

我需要查询数据库中的匹配项,但我当前的变量是一个只有6位小数的浮点数:

self.lat => 30.267153

如何将我的浮点数转换为额外的小数位,以便得到匹配?

myloc = Marker.where("lat = ?", self.lat)

我见过Decimal和BigDecimal文档。这些是最好的方法吗?

Ruby 1.8.7,Rails 3.感谢任何建议。

2 个答案:

答案 0 :(得分:25)

您可以使用sprintf - 或更简单的兄弟String#% - 将浮点数格式化为包含10位小数的字符串:

f = 30.267153
s = "%0.10f" % f
#=> "30.2671530000"

但这对我来说似乎很可疑;你的lat和lng列有哪些类型的字段?您使用的是什么RDBMS?你真的想要完全比较浮点值吗?你真的想把它们作为字符串存储吗?

答案 1 :(得分:7)

你可以试试这个:

"%.10f" % self.lat