From 5ca45ded2b0c50d73bd7c14f39f12a0e92ef7732 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 29 Jan 2021 17:27:37 +0800 Subject: [PATCH] add method --- .../java/cn/hutool/core/util/NumberUtil.java | 70 +++++++++++++------ 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java index 13fb9e4cd..6d4698c6c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java @@ -1973,22 +1973,36 @@ public class NumberUtil { * @return A String. */ public static String toStr(Number number) { + return toStr(number, true); + } + + /** + * 数字转字符串
+ * 调用{@link Number#toString()}或 {@link BigDecimal#toPlainString()},并去除尾小数点儿后多余的0 + * + * @param number A Number + * @param isStripTrailingZeros 是否去除末尾多余0,例如5.0返回5 + * @return A String. + */ + public static String toStr(Number number, boolean isStripTrailingZeros) { Assert.notNull(number, "Number is null !"); // BigDecimal单独处理,使用非科学计数法 if (number instanceof BigDecimal) { - return toStr((BigDecimal) number); + return toStr((BigDecimal) number, isStripTrailingZeros); } Assert.isTrue(isValidNumber(number), "Number is non-finite!"); // 去掉小数点儿后多余的0 String string = number.toString(); - if (string.indexOf('.') > 0 && string.indexOf('e') < 0 && string.indexOf('E') < 0) { - while (string.endsWith("0")) { - string = string.substring(0, string.length() - 1); - } - if (string.endsWith(".")) { - string = string.substring(0, string.length() - 1); + if (isStripTrailingZeros) { + if (string.indexOf('.') > 0 && string.indexOf('e') < 0 && string.indexOf('E') < 0) { + while (string.endsWith("0")) { + string = string.substring(0, string.length() - 1); + } + if (string.endsWith(".")) { + string = string.substring(0, string.length() - 1); + } } } return string; @@ -2003,8 +2017,24 @@ public class NumberUtil { * @since 5.4.6 */ public static String toStr(BigDecimal bigDecimal) { + return toStr(bigDecimal, true); + } + + /** + * {@link BigDecimal}数字转字符串
+ * 调用{@link BigDecimal#toPlainString()},可选去除尾小数点儿后多余的0 + * + * @param bigDecimal A {@link BigDecimal} + * @param isStripTrailingZeros 是否去除末尾多余0,例如5.0返回5 + * @return A String. + * @since 5.4.6 + */ + public static String toStr(BigDecimal bigDecimal, boolean isStripTrailingZeros) { Assert.notNull(bigDecimal, "BigDecimal is null !"); - return bigDecimal.stripTrailingZeros().toPlainString(); + if(isStripTrailingZeros){ + bigDecimal = bigDecimal.stripTrailingZeros(); + } + return bigDecimal.toPlainString(); } /** @@ -2044,9 +2074,9 @@ public class NumberUtil { * @since 4.0.9 */ public static BigDecimal toBigDecimal(String number) { - try{ + try { number = parseNumber(number).toString(); - } catch (Exception ignore){ + } catch (Exception ignore) { // 忽略解析错误 } return StrUtil.isBlank(number) ? BigDecimal.ZERO : new BigDecimal(number); @@ -2314,9 +2344,9 @@ public class NumberUtil { return Integer.parseInt(number.substring(2), 16); } - try{ + try { return Integer.parseInt(number); - } catch (NumberFormatException e){ + } catch (NumberFormatException e) { return parseNumber(number).intValue(); } } @@ -2347,9 +2377,9 @@ public class NumberUtil { return Long.parseLong(number.substring(2), 16); } - try{ + try { return Long.parseLong(number); - } catch (NumberFormatException e){ + } catch (NumberFormatException e) { return parseNumber(number).longValue(); } } @@ -2373,9 +2403,9 @@ public class NumberUtil { return 0f; } - try{ + try { return Float.parseFloat(number); - } catch (NumberFormatException e){ + } catch (NumberFormatException e) { return parseNumber(number).floatValue(); } } @@ -2399,9 +2429,9 @@ public class NumberUtil { return 0D; } - try{ + try { return Double.parseDouble(number); - } catch (NumberFormatException e){ + } catch (NumberFormatException e) { return parseNumber(number).doubleValue(); } } @@ -2411,10 +2441,10 @@ public class NumberUtil { * * @param numberStr Number字符串 * @return Number对象 - * @since 4.1.15 * @throws NumberFormatException 包装了{@link ParseException},当给定的数字字符串无法解析时抛出 + * @since 4.1.15 */ - public static Number parseNumber(String numberStr) throws NumberFormatException{ + public static Number parseNumber(String numberStr) throws NumberFormatException { try { return NumberFormat.getInstance().parse(numberStr); } catch (ParseException e) {