当我使用toString()获取JScience Amount对象时,我得到如下结果:
(7.5 ± 4.4E-16) mph
这并不可怕,但我真的很想输出类似的内容:
7.5 miles per hour
有一种简单的方法吗?
编辑:为了澄清,我希望有一个适用于任何类型单位(或至少所有预定义单位)的金额的解决方案,而不仅仅是“英里”。
答案 0 :(得分:2)
虽然它会丢弃错误和单位,但你可以这样做:
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");
控制台:
(7.5 ± 4.4E-16) mph 7.5 miles per hour
附录:我希望有一个适用于任何单位的任何金额的解决方案。
您仍需提供自己的标签来替换默认的UnitFormat
;标签字符受isValidIdentifier()
限制。根据@RogerLindsjö的建议,您也可以替换自己的AmountFormat
。此示例打印估计值的任意数量的有效数字和标签的有效变体。另请参阅TypeFormat
。
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);
控制台:
7.5 miles_per_hour