小编典典

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

java

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

(7.5 ± 4.4E-16) mph

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

7.5 miles per hour

是否有捷径可寻?

编辑: 为了明确起见,我希望找到一种解决方案,该解决方案适用于具有任何类型单位(或至少所有预定义单位)的任何金额,而不仅仅是“ mph”。


阅读 198

收藏
2020-11-30

共1个答案

小编典典

尽管它会丢弃错误和单位,但是您可以执行以下操作:

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按照@RogerLindsjö的建议替换自己的。本示例打印估计值的任意有效位数和标签的有效变体。另请参阅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英里/小时
2020-11-30