2011-12-15 35 views
1

当我使用的toString()用于JScience金额对象我得到的结果是这样的:有没有办法以更“人性化”的格式让JScience输出?

(7.5 ± 4.4E-16) mph 

这是不可怕的,但我真的很喜欢它的输出是这样的:

7.5 miles per hour 

是否有捷径可寻?

编辑:为了澄清,我希望能够为任何类型的单位(或至少所有预定义单位)的任何金额工作的解决方案,而不仅仅是“mph”。

+0

你试过在org.jscience.physics.amount.AmountFormat设置自己的格式? – 2011-12-15 12:59:36

+0

@Roger我没有,有没有一种方法可以以一般的方式来做它我需要的? – sanity 2011-12-15 13:04:54

回答

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 
相关问题