有没有办法让JScience以更“人性化”的格式输出?

时间:2011-12-15 02:11:50

标签: java jscience

当我使用toString()获取JScience Amount对象时,我得到如下结果:

(7.5 ± 4.4E-16) mph

这并不可怕,但我真的很想输出类似的内容:

7.5 miles per hour

有一种简单的方法吗?

编辑:为了澄清,我希望有一个适用于任何类型单位(或至少所有预定义单位)的金额的解决方案,而不仅仅是“英里”。

1 个答案:

答案 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