Long和lat的BigDecimal问题

时间:2016-10-24 10:45:16

标签: java groovy latitude-longitude bigdecimal

我有一个地址域,其字段为lat,长为BigDecimal,我使用scale的约束为16.我有这个地址

550 Tremont St, Boston, MA 02116, USA

其长期和纬度为-71.07126540000002和42.3438919

此地址的经度在db中存储为-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

帮助!

2 个答案:

答案 0 :(得分:2)

您也可以使用BigDecimal表示法:

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

两者都导致:

-71.0712654000000200

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

答案 1 :(得分:1)

应该使用

a.setScale(14, RoundingMode.HALF_UP)
自从第14次发布以来零没有意义

最后将 -71.07126540000002