1

JScience Amount オブジェクトに toString() を使用すると、次のような結果が得られます。

(7.5 ± 4.4E-16) mph

これはひどいものではありませんが、次のような出力が本当に欲しいです:

7.5 miles per hour

これを行う簡単な方法はありますか?

編集:明確にするために、「mph」だけでなく、任意のタイプの単位 (または少なくともすべての事前定義された単位) を持つ任意の量で機能するソリューションを望んでいます。

4

1 に答える 1

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マイル

補遺:任意の単位で任意の量に対して機能するソリューションを望んでいます。

デフォルトを置き換えるには、独自のラベルを提供する必要があります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
于 2011-12-15T06:59:57.550 に答える