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。
我有一个地址域,它有 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。