Java:快速双精度到欧式字符串表示法

Java:快速双精度到欧式字符串表示法,java,string,double,Java,String,Double,我需要显示很多货币(欧元)值,这些值在使用滑块时可能会发生变化。因此,我创建了一个更快的双倍欧元功能,而不是使用数字格式化程序(无需内部化,在资源有限的android设备上运行) 虽然这个函数比默认的数字格式化程序快得多,但如果它能更快的话,那将很有趣。有什么创意吗 /* * Ugly but fast double to euro string function */ public static final String getEuroString(Double euro) { i

我需要显示很多货币(欧元)值,这些值在使用滑块时可能会发生变化。因此,我创建了一个更快的双倍欧元功能,而不是使用数字格式化程序(无需内部化,在资源有限的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) + " €";
}
/*
*丑陋但快速的双欧元字符串函数
*/
公共静态最终字符串getEuroString(双欧元){
如果(欧元==null){
返回“0,00欧元”;
}
最终双d_欧元=欧元;
最终整数post=数学abs((整数)数学四舍五入((欧元%1)*100));
返回((国际)欧元)+“,”+(岗位<10?“0”+岗位:岗位)+“欧元”;
}

不要使用double存储货币值,请使用大十进制或

您需要对结果进行四舍五入,以防给出四舍五入或表示错误

试一试

印在


使用这种方法,你可以存储70万亿欧元而不会出错。

除非你告诉他如何使用BigDecimal或Joda Money,否则这更多的是一个评论,而不是一个答案。而且,这可能会更慢。@NimChimpsky:没有对这些双值进行比较或其他操作。它们甚至是正确的四舍五入(从json请求解析而来),我感到困惑。方法
Integer.valueOf
返回一个整数(从字符串中解析),因此将对整数调用
子字符串(1)
,对吗?代码是uncompilable@Markus你是对的。它应该是为了得到一个字符串而使用的。@PeterLawrey-nope。仍然无法编译:eurocents-是一个
长的
。但是Integer.toString只接受
int
不起作用:对于70万亿-它返回
70000000004400€
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 €