我需要显示很多货币(欧元)值,这些值在使用滑块时都可能会发生变化。因此,我创建了一个更快的 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) + " €";
}
答案 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 + " €";
}
上打印
70000000000000,00 €
70000000000000,01 €
使用这种方法,您可以毫无错误地存储70万亿欧元。