【问题标题】:Is there a way to make JScience output in a more "human friendly" format?有没有办法让 JScience 以更“人性化”的格式输出?
【发布时间】:2011-12-16 03:03:09
【问题描述】:

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

(7.5 ± 4.4E-16) mph

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

7.5 miles per hour

有没有简单的方法可以做到这一点?

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

【问题讨论】:

  • 您是否尝试过在 org.jscience.physics.amount.AmountFormat 上设置自己的格式?
  • @Roger 我没有,有没有办法以一般的方式做我需要的事情?
  • 设置静态金额格式似乎相当容易。 javadoc 甚至有一个例子。请参阅jscience.org/api/org/jscience/physics/amount/… getExactDigitsInstance 是您所需要的。

标签: java jscience


【解决方案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() 限制。您也可以按照@Roger Lindsjö 的建议替换您自己的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 英里每小时

【讨论】:

  • 对,但是我希望有一个适用于任何单位的任何数量的解决方案,mph 只是一个示例
猜你喜欢
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 2020-07-17
  • 2013-08-03
  • 1970-01-01
  • 2021-08-31
相关资源
最近更新 更多