|
|
@ -778,34 +778,73 @@ public class CommonUtil { |
|
|
if (number == null) { |
|
|
if (number == null) { |
|
|
return null; |
|
|
return null; |
|
|
} |
|
|
} |
|
|
if (null == scale){ |
|
|
if (scale == null) { |
|
|
scale = 2; |
|
|
scale = 2; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
try { |
|
|
try { |
|
|
BigDecimal bd; |
|
|
// String 类型特殊处理(支持逗号分隔)
|
|
|
|
|
|
if (number instanceof String) { |
|
|
if (number instanceof BigDecimal) { |
|
|
|
|
|
bd = (BigDecimal) number; |
|
|
|
|
|
} else if (number instanceof Number) { |
|
|
|
|
|
// 包含 Double / Integer / Long / double 等
|
|
|
|
|
|
bd = BigDecimal.valueOf(((Number) number).doubleValue()); |
|
|
|
|
|
} else if (number instanceof String) { |
|
|
|
|
|
String str = ((String) number).trim(); |
|
|
String str = ((String) number).trim(); |
|
|
if (str.isEmpty()) { |
|
|
if (str.isEmpty()) { |
|
|
return str; |
|
|
return str; |
|
|
} |
|
|
} |
|
|
bd = new BigDecimal(str); |
|
|
// 逗号分隔的情况
|
|
|
} else { |
|
|
if (str.contains(",")) { |
|
|
// 非法类型,直接返回原值
|
|
|
String[] parts = str.split(","); |
|
|
return number.toString(); |
|
|
StringBuilder result = new StringBuilder(); |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < parts.length; i++) { |
|
|
|
|
|
String part = parts[i].trim(); |
|
|
|
|
|
if (!part.isEmpty()) { |
|
|
|
|
|
result.append(formatDecimalSingle(part, scale)); |
|
|
|
|
|
} |
|
|
|
|
|
if (i < parts.length - 1) { |
|
|
|
|
|
result.append(","); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return result.toString(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 单个数字字符串
|
|
|
|
|
|
return formatDecimalSingle(str, scale); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// BigDecimal
|
|
|
|
|
|
if (number instanceof BigDecimal) { |
|
|
|
|
|
return ((BigDecimal) number) |
|
|
|
|
|
.setScale(scale, RoundingMode.HALF_UP) |
|
|
|
|
|
.toPlainString(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Number(Double / Integer / Long / double 等)
|
|
|
|
|
|
if (number instanceof Number) { |
|
|
|
|
|
BigDecimal bd = BigDecimal.valueOf(((Number) number).doubleValue()); |
|
|
return bd.setScale(scale, RoundingMode.HALF_UP).toPlainString(); |
|
|
return bd.setScale(scale, RoundingMode.HALF_UP).toPlainString(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 其他类型,直接返回
|
|
|
|
|
|
return number.toString(); |
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
logger.error("非法数字格式: {}", number, e); |
|
|
logger.error("非法数字格式: {}", number, e); |
|
|
return number.toString(); |
|
|
return number.toString(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 处理单个数字字符串 |
|
|
|
|
|
*/ |
|
|
|
|
|
private static String formatDecimalSingle(String value, int scale) { |
|
|
|
|
|
BigDecimal bd = new BigDecimal(value); |
|
|
|
|
|
return bd.setScale(scale, RoundingMode.HALF_UP).toPlainString(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) { |
|
|
|
|
|
System.out.println(formatDecimal("123.456789", 2)); |
|
|
|
|
|
System.out.println(formatDecimal(123.456789, 2)); |
|
|
|
|
|
System.out.println(formatDecimal("123.456,7.898", 2)); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|