У меня есть домен адреса, который имеет поле широты и долго, как BigDecimal и я использую ограничение масштаба, как 16. Я этот адресBigDecimal проблемы с длинными и широчайшими
550 Tremont St, Boston, MA 02116, USA
его длинный и латами являются - 71.07126540000002 и 42.3438919
Долгота для этого адреса хранится в дБ как -71.0712654000000200. теперь мне нужно сравнить сохраненную долготу с любым новым запросом, чтобы проверить, существует ли уже долгота.
Я посылаю ту же долготу снова -71.07126540000002, но я не могу преобразовать ее в форму, сохраненную в db (-71.0712654000000200), прежде чем сравнивать, поскольку они длинны. того же адреса.
я попытался с помощью
BigDecimal a = new BigDecimal(-71.07126540000002)
println a.setScale(16, RoundingMode.CEILING) // tried all other RoundingMode
, но все дают ответ, как ни -71.0712654000000156 или -71,0712654000000157, но не получают -71.0712654000000200
Помощи!
Мне кажется, что оба значения имеют 7 цифр точности, а остальное - просто ошибка. Круглые до 16 знаков после запятой не подходят, если у вас есть 15-16 цифр точности. –
Сделайте это для точного представления: 'BigDecimal a = new BigDecimal (" - 71.07126540000002 ")'. У парных чисел нет точного представления для десятичной части. –
Немного смешно искать точное совпадение. Цифры, которые вы указали, на несколько порядков меньше микрометра. По всем практическим причинам это одно и то же место. – Henry