我有一个地址域,其字段为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
帮助!
答案 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