JScience Amount オブジェクトに toString() を使用すると、次のような結果が得られます。
(7.5 ± 4.4E-16) mph
これはひどいものではありませんが、次のような出力が本当に欲しいです:
7.5 miles per hour
これを行う簡単な方法はありますか?
編集:明確にするために、「mph」だけでなく、任意のタイプの単位 (または少なくともすべての事前定義された単位) を持つ任意の量で機能するソリューションを望んでいます。
エラーと単位は破棄されますが、次のようなことができます。
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マイル
補遺:任意の単位で任意の量に対して機能するソリューションを望んでいます。
デフォルトを置き換えるには、独自のラベルを提供する必要があります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.5mile_per_hour