0

多くの通貨 (ユーロ) の値を表示する必要がありましたが、これらはすべてスライダーの使用中に変更される可能性があります。したがって、数値フォーマッタを使用する代わりに、より高速な Double to Euro関数を作成しました (内部化は不要で、リソースが限られている Android デバイスで実行されます)。

この関数はデフォルトの数値フォーマッタよりもはるかに高速ですが、さらに高速になると興味深いでしょう。クリエイティブなアイデアはありますか?

/*
 * Ugly but fast double to euro string function
 */
public static final String getEuroString(Double euro) {
    if(euro == null) {
        return "0,00 €";
    }

    final double    d_euro  = euro;
    final int       post    = Math.abs((int) Math.round((d_euro % 1) * 100));

    return ((int) d_euro) + "," + (post < 10 ? "0" + post : post) + " €";
}
4

2 に答える 2

0

don't store money values using double, use big decimal or joda-money.sourceforge.net

于 2012-08-01T15:58:19.253 に答える
0

丸めまたは表現エラーを与えた場合に備えて、結果を丸める必要があります。

試す

public static void main(String[] args) {
    System.out.println(print(70e12));
    System.out.println(print(70e12 + 0.01));
}

public static String print(double euro) {
    long eurocents = Math.round(euro * 100);
    String centsStr = Long.toString(100 + eurocents%100).substring(1);
    return eurocents / 100 + "," + centsStr + " €";
}

https://ideone.com/NAonp0に掲載

70000000000000,00 €
70000000000000,01 €

このアプローチを使用すると、エラーなしで 70 兆ユーロを保管できます。

于 2012-08-01T16:00:50.007 に答える