Как заставить число до 10 десятичных знаков в Ruby on Rails? - PullRequest
15 голосов
/ 12 февраля 2011

В моей базе данных есть значения широты и долготы с точностью до 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 ]

25 голосов
/ 12 февраля 2011

Вы можете использовать sprintf - или его проще, брат String#% -, чтобы отформатировать число с плавающей запятой в виде строки с 10 десятичными знаками:

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

Это кажется мне подозрительным; какие типы полей являются вашими столбцами lat и lng? Какие СУБД вы используете? Вы действительно хотите точно сравнивать значения с плавающей запятой? Вы действительно хотите хранить их как строки?

7 голосов
/ 12 февраля 2011

Вы можете попробовать это:

"%.10f" % self.lat
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...