尽管它会丢弃错误和单位,但您可以执行以下操作:
Amount<Velocity> x = Amount.valueOf(7.5, NonSI.MILES_PER_HOUR);
System.out.println(x);
System.out.println(
x.doubleValue(NonSI.MILES_PER_HOUR) + " miles per hour");
Console:
(7.5 ± 4.4E-16) mph
7.5 miles per hour
附录:我希望有一个适用于任何单位的任何数量的解决方案。
您仍然需要提供自己的标签来替换默认标签UnitFormat http://jscience.org/api/javax/measure/unit/UnitFormat.html#label%28javax.measure.unit.Unit,%20java.lang.String%29;标签字符受以下限制isValidIdentifier()
。也可以用自己的代替AmountFormat http://jscience.org/api/org/jscience/physics/amount/AmountFormat.html,正如@Roger Lindsjö 所建议的。此示例打印任意数量的估计值有效数字和标签的有效变体。也可以看看TypeFormat http://javolution.org/target/site/apidocs/javolution/text/TypeFormat.html.
final UnitFormat uf = UnitFormat.getInstance();
uf.label(NonSI.MILES_PER_HOUR, "miles_per_hour");
AmountFormat.setInstance(new AmountFormat() {
@Override
public Appendable format(Amount<?> m, Appendable a) throws IOException {
TypeFormat.format(m.getEstimatedValue(), -1, false, false, a);
a.append(" ");
return uf.format(m.getUnit(), a);
}
@Override
public Amount<?> parse(CharSequence csq, Cursor c) throws IllegalArgumentException {
throw new UnsupportedOperationException("Parsing not supported.");
}
});
Amount<Velocity> x = Amount.valueOf(7.5, NonSI.MILES_PER_HOUR);
System.out.println(x);
Console:
7.5 miles_per_hour