簡體   English   中英

度量單位 API (JSR-363) - 浮點錯誤

[英]Unit Of Measures API (JSR-363) - Floating Point Errors

我們使用 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包含一個浮點錯誤為 0.10099999999999999 m 的Double表示。 該實現在內部使用double精度值,並在轉換值時失去精度。 我們需要對值進行舍入/引入一個比例,這並不理想。

有什么明顯的我做錯了嗎? 我是否錯過了某種使我能夠保持精度的 API 使用方法,或者無論我做什么,所有轉換都通過Double值路由並且會失去精度?

在提出這個問題后進一步搜索,我意識到我們的應用程序使用了錯誤的庫。 unit-ri用於 Java ME 並在內部使用 double, uom-se用於 Java SE 並使用 BigDecimal。 這解決了我們的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM