diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java
index 2d01965b..8a2ad80a 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java
@@ -2,6 +2,7 @@ package com.ruoyi.common.core.text;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.math.RoundingMode;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.text.NumberFormat;
@@ -11,7 +12,7 @@ import org.apache.commons.lang3.ArrayUtils;
/**
* 类型转换器
- *
+ *
* @author ruoyi
*/
public class Convert
@@ -20,7 +21,7 @@ public class Convert
* 转换为字符串
* 如果给定的值为null,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -42,7 +43,7 @@ public class Convert
* 转换为字符串
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -55,7 +56,7 @@ public class Convert
* 转换为字符
* 如果给定的值为null,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -79,7 +80,7 @@ public class Convert
* 转换为字符
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -92,7 +93,7 @@ public class Convert
* 转换为byte
* 如果给定的值为null
,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -130,7 +131,7 @@ public class Convert
* 转换为byte
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -143,7 +144,7 @@ public class Convert
* 转换为Short
* 如果给定的值为null
,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -181,7 +182,7 @@ public class Convert
* 转换为Short
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -194,7 +195,7 @@ public class Convert
* 转换为Number
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -228,7 +229,7 @@ public class Convert
* 转换为Number
* 如果给定的值为空,或者转换失败,返回默认值null
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -241,7 +242,7 @@ public class Convert
* 转换为int
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -279,7 +280,7 @@ public class Convert
* 转换为int
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -290,7 +291,7 @@ public class Convert
/**
* 转换为Integer数组
- *
+ *
* @param str 被转换的值
* @return 结果
*/
@@ -301,7 +302,7 @@ public class Convert
/**
* 转换为Long数组
- *
+ *
* @param str 被转换的值
* @return 结果
*/
@@ -312,7 +313,7 @@ public class Convert
/**
* 转换为Integer数组
- *
+ *
* @param split 分隔符
* @param split 被转换的值
* @return 结果
@@ -335,7 +336,7 @@ public class Convert
/**
* 转换为Long数组
- *
+ *
* @param split 分隔符
* @param str 被转换的值
* @return 结果
@@ -358,7 +359,7 @@ public class Convert
/**
* 转换为String数组
- *
+ *
* @param str 被转换的值
* @return 结果
*/
@@ -369,7 +370,7 @@ public class Convert
/**
* 转换为String数组
- *
+ *
* @param split 分隔符
* @param split 被转换的值
* @return 结果
@@ -383,7 +384,7 @@ public class Convert
* 转换为long
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -422,7 +423,7 @@ public class Convert
* 转换为long
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -435,7 +436,7 @@ public class Convert
* 转换为double
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -474,7 +475,7 @@ public class Convert
* 转换为double
* 如果给定的值为空,或者转换失败,返回默认值null
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -487,7 +488,7 @@ public class Convert
* 转换为Float
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -525,7 +526,7 @@ public class Convert
* 转换为Float
* 如果给定的值为空,或者转换失败,返回默认值null
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -538,7 +539,7 @@ public class Convert
* 转换为boolean
* String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -579,7 +580,7 @@ public class Convert
* 转换为boolean
* 如果给定的值为空,或者转换失败,返回默认值null
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -591,7 +592,7 @@ public class Convert
/**
* 转换为Enum对象
* 如果给定的值为空,或者转换失败,返回默认值
- *
+ *
* @param clazz Enum的Class
* @param value 值
* @param defaultValue 默认值
@@ -627,7 +628,7 @@ public class Convert
/**
* 转换为Enum对象
* 如果给定的值为空,或者转换失败,返回默认值null
- *
+ *
* @param clazz Enum的Class
* @param value 值
* @return Enum
@@ -641,7 +642,7 @@ public class Convert
* 转换为BigInteger
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -679,7 +680,7 @@ public class Convert
* 转换为BigInteger
* 如果给定的值为空,或者转换失败,返回默认值null
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -692,7 +693,7 @@ public class Convert
* 转换为BigDecimal
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
@@ -738,7 +739,7 @@ public class Convert
* 转换为BigDecimal
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
- *
+ *
* @param value 被转换的值
* @return 结果
*/
@@ -750,7 +751,7 @@ public class Convert
/**
* 将对象转为字符串
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
- *
+ *
* @param obj 对象
* @return 字符串
*/
@@ -762,7 +763,7 @@ public class Convert
/**
* 将对象转为字符串
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
- *
+ *
* @param obj 对象
* @param charsetName 字符集
* @return 字符串
@@ -775,7 +776,7 @@ public class Convert
/**
* 将对象转为字符串
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
- *
+ *
* @param obj 对象
* @param charset 字符集
* @return 字符串
@@ -809,7 +810,7 @@ public class Convert
/**
* 将byte数组转为字符串
- *
+ *
* @param bytes byte数组
* @param charset 字符集
* @return 字符串
@@ -821,7 +822,7 @@ public class Convert
/**
* 解码字节码
- *
+ *
* @param data 字符串
* @param charset 字符集,如果此字段为空,则解码的结果取决于平台
* @return 解码后的字符串
@@ -842,7 +843,7 @@ public class Convert
/**
* 将编码的byteBuffer数据转换为字符串
- *
+ *
* @param data 数据
* @param charset 字符集,如果为空使用当前系统字符集
* @return 字符串
@@ -859,7 +860,7 @@ public class Convert
/**
* 将编码的byteBuffer数据转换为字符串
- *
+ *
* @param data 数据
* @param charset 字符集,如果为空使用当前系统字符集
* @return 字符串
@@ -876,7 +877,7 @@ public class Convert
// ----------------------------------------------------------------------- 全角半角转换
/**
* 半角转全角
- *
+ *
* @param input String.
* @return 全角字符串.
*/
@@ -887,14 +888,14 @@ public class Convert
/**
* 半角转全角
- *
+ *
* @param input String
* @param notConvertSet 不替换的字符集合
* @return 全角字符串.
*/
public static String toSBC(String input, Set notConvertSet)
{
- char c[] = input.toCharArray();
+ char[] c = input.toCharArray();
for (int i = 0; i < c.length; i++)
{
if (null != notConvertSet && notConvertSet.contains(c[i]))
@@ -918,7 +919,7 @@ public class Convert
/**
* 全角转半角
- *
+ *
* @param input String.
* @return 半角字符串
*/
@@ -929,14 +930,14 @@ public class Convert
/**
* 替换全角为半角
- *
+ *
* @param text 文本
* @param notConvertSet 不替换的字符集合
* @return 替换后的字符
*/
public static String toDBC(String text, Set notConvertSet)
{
- char c[] = text.toCharArray();
+ char[] c = text.toCharArray();
for (int i = 0; i < c.length; i++)
{
if (null != notConvertSet && notConvertSet.contains(c[i]))
@@ -961,7 +962,7 @@ public class Convert
/**
* 数字金额大写转换 先写个完整的然后将如零拾替换成零
- *
+ *
* @param n 数字
* @return 中文大写数字
*/
@@ -977,7 +978,12 @@ public class Convert
String s = "";
for (int i = 0; i < fraction.length; i++)
{
- s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
+ // 优化double计算精度丢失问题
+ BigDecimal nNum = new BigDecimal(n);
+ BigDecimal decimal = new BigDecimal(10);
+ BigDecimal scale = nNum.multiply(decimal).setScale(2, RoundingMode.HALF_EVEN);
+ double d = scale.doubleValue();
+ s += (digit[(int) (Math.floor(d * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
}
if (s.length() < 1)
{