Java:快速加倍到欧元字符串表示

时间:2012-08-01 15:53:22

标签: java string double

我需要显示很多货币(欧元)值,这些值在使用滑块时都可能会发生变化。因此,我创建了一个更快的 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) + " €";
}

2 个答案:

答案 0 :(得分:0)

不要使用double存储货币值,使用大小数或joda-money.sourceforge.net

答案 1 :(得分: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万亿欧元。