免责声明: 我只建议您在绝对需要速度的情况下使用此功能。
在我的机器上,以下代码可以在约130毫秒内完成100万次转换:
private static final int POW10[] = {1, 10, 100, 1000, 10000, 100000, 1000000}; public static String format(double val, int precision) { StringBuilder sb = new StringBuilder(); if (val < 0) { sb.append('-'); val = -val; } int exp = POW10[precision]; long lval = (long)(val * exp + 0.5); sb.append(lval / exp).append('.'); long fval = lval % exp; for (int p = precision - 1; p > 0 && fval < POW10[p]; p--) { sb.append('0'); } sb.append(fval); return sb.toString(); }所提供的代码有几个缺点:它只能处理有限范围的
doubles,而不能处理NaN。前者可以通过扩展
POW10数组来解决(但只能部分解决)。后者可以在代码中显式处理。



