2011-12-15 67 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 
相關問題