我们使用tec.units.unit-ri作为JSR-363 javax.measure.unit-api的实现。
我们在应用程序中使用了几种重量,长度和温度类型,我们决定使用BigDecimal进行存储。在进行一些转换时,我意识到在我们的实例中出现了浮点错误。
Unit<Length> metres = Units.METRE;
Unit<Length> centimetres = Units.METRE.divide(100);
BigDecimal valueInCentimetres = new BigDecimal("10.1");
Quantity<Length> valueInMetres = Quantities.getQuantity(valueInCentimetres, centimetres).to(metres) ;
如果运行此代码,则变量valueInMetres
包含一个Double
表示形式,其浮点错误为0.10099999999999999 m。该实现在内部使用double
值,并且在转换值时会失去精度。我们需要将小数位数舍入/引入到该值,这并不理想。
我在这里做错什么明显吗?我是否错过了使用API保持准确性的某种方式,还是所有转换都通过Double
值进行路由,而无论我做什么都会丢失精度?