我有一个应用需要执行多个单位转换(公制为英制,英制为公制)。
是否有现成的Java库可以执行此操作?或者我需要自己动手? (我最初的谷歌搜索证明是无用的。)
答案 0 :(得分:54)
有一个特定的JSR 275(javax.measure),其中JScience为RI(参考实现)。例如,将100英里转换为公里很容易:
UnitConverter toKilometers = MILE.getConverterTo(KILOMETER);
double km = toKilometers.convert(Measure.valueOf(100, MILE).doubleValue(MILE));
(请注意,单位都是类型安全的编译时,一个杀手级功能imho)
相反可能很容易:
UnitConverter toMiles1 = KILOMETER.getConverterTo(MILE);
或supereasy as:
UnitConverter toMiles2 = toKilometers.inverse();
NB进口:
import javax.measure.Measure;
import javax.measure.converter.UnitConverter;
import javax.measure.quantity.Length;
import static javax.measure.unit.NonSI.*;
import static javax.measure.unit.SI.*;
答案 1 :(得分:2)
我们为Java,JavaScript和C#创建了一个库UnitOf,以轻松执行这些度量转换。共有20多种完整的度量单位,转换只需一行即可完成。
//One liner
double x = new UnitOf.Mass().fromPounds(5).toKilograms(); //2.26796 returned as 5 pounds is 2.26796 kilograms
//Or as a variable
UnitOf.Length feet = new UnitOf.Length().fromFeet(5.5); //Instantiate UnitOf.Length and set "feet" as 5.5
double foo = feet.toInches(); //66 returned as 5.5 feet is 66 inches
double bar = feet.toMeters(); //1.6764 returned as 5.5 feet is 1.6764 meters
UnitOf还具有解析数据类型,在分数之间进行转换以及甚至创建自己的自定义UnitOf度量的功能。
答案 2 :(得分:0)
添加到桩......
Unidata现在将netcdf-java的java单位转换库发布为standalone package。
答案 3 :(得分:-1)
我在SourceForge找到Java Unit Conversion library,但我还没有尝试过(我将在不久的将来需要类似的功能)。它被许可为BSD许可。这可能有所帮助。