1

当我将 toString() 用于 JScience Amount 对象时,我得到如下结果:

(7.5 ± 4.4E-16) mph

这并不可怕,但我真的希望它输出如下内容:

7.5 miles per hour

是否有捷径可寻?

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

4

1 回答 1

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) 英里/小时
每小时 7.5 英里

附录:我希望有一个适用于任何单位的任何数量的解决方案。

您仍然需要提供自己的标签来替换默认标签UnitFormat;标签字符由 限制isValidIdentifier()。您也可以AmountFormat按照@Roger Lindsjö 的建议替换您自己的 . 此示例打印任意数量的估计值有效数字和标签的有效变体。另请参阅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 英里每小时
于 2011-12-15T06:59:57.550 回答