public static String format(double dValue, int lScale) { // ////负数,则装化为正数后进行四舍五入 boolean bFlag = false; if (dValue < 0) { bFlag = true; dValue = -dValue; } long lPrecision = 10000; // 精度值,为了避免double型出现偏差,增加校验位 long l45Value = lPrecision / 2 - 1; // 四舍五入的判断值 long lLength = 1; // 乘的数字 for (int i = 0; i < lScale; i++) { lLength = lLength * 10; // 比如保留2位,乘以100 } long lValue = (long) dValue; // 值的整数部分 long lValue1 = (long) ((dValue - lValue) * lLength); // 乘以保留位数 long lValue2 = (long) ((dValue - lValue) * lLength * lPrecision); // long lLastValue = lValue2 - (lValue2 / lPrecision) * lPrecision; if (lLastValue >= l45Value) { lValue1++; } dValue = lValue + (double) lValue1 / lLength; // 四舍五入后的值 if (bFlag) { dValue = -dValue; } java.math.BigDecimal bd = new java.math.BigDecimal(dValue); bd = bd.setScale(lScale, java.math.BigDecimal.ROUND_HALF_UP); return bd.toString(); // Replace by Huang Ye // double d = UtilOperation.Arith.round(dValue, lScale); // return String.valueOf(dValue); }