Java 计量单位API(JSR-363)-浮点错误

Java 计量单位API(JSR-363)-浮点错误,java,unit-conversion,jsr363,Java,Unit Conversion,Jsr363,我们使用tec.units.unit-ri作为JSR-363 javax.measure.unit-api的实现 我们在应用程序中使用了几种重量、长度和温度类型,我们决定使用BigDecimal来存储它们。在进行一些转换时,我意识到在我们的实例中出现了浮点错误 Unit<Length> metres = Units.METRE; Unit<Length> centimetres = Units.METRE.divide(100); BigDecimal valueInCe

我们使用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) ;
单位米=单位米;
单位厘米=单位米除以(100);
BigDecimal ValueIncentimeters=新的BigDecimal(“10.1”);
数量值inmeters=数量。获取数量(值incentimes,厘米)。到(米);
如果我运行此代码,变量
valueinmeters
包含一个带有浮点错误的
Double
表示,即0.10099999999m。该实现在内部使用
值,并且在转换值时会丢失精度。我们需要对该值进行四舍五入/引入一个刻度,这并不理想


有什么明显的我做错了吗?我是否错过了使用API来保持精度的方法,或者所有转换都是通过
值进行的,并且无论我做什么都会失去精度?

进一步搜索问了这个问题后,我意识到我们的应用程序使用了错误的库。用于JavaME,内部使用double;用于JavaSE,内部使用BigDecimal。这就解决了我们的问题