Long 和 Lat 的 BigDecimal 问题

BigDecimal issue with long and lat

我有一个地址域,它有 BigDecimal 的经纬度字段,我使用的比例约束为 16。我有这个地址

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

求助!

应该用

a.setScale(14, RoundingMode.HALF_UP)

自第 14 名之后。零没有意义

最后会是-71.07126540000002

您也可以只使用 BigDecimal 表示法:

-71.0712654000000200000g​.setScale(16)​-71.07126540000002000000G.setScale(16)

两者都导致:

-71.0712654000000200

另一个选项是设置自定义 MathContext