优化数字金额大写转换精度丢失问题

pull/476/head
RuoYi 2023-11-10 16:29:24 +08:00
parent d7f58f4128
commit 7d91e58594
1 changed files with 54 additions and 48 deletions

View File

@ -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
* <br>
* null<br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -42,7 +43,7 @@ public class Convert
* <br>
* <code>null</code><code>null</code><br>
*
*
*
* @param value
* @return
*/
@ -55,7 +56,7 @@ public class Convert
* <br>
* null<br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -79,7 +80,7 @@ public class Convert
* <br>
* <code>null</code><code>null</code><br>
*
*
*
* @param value
* @return
*/
@ -92,7 +93,7 @@ public class Convert
* byte<br>
* <code>null</code><br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -130,7 +131,7 @@ public class Convert
* byte<br>
* <code>null</code><code>null</code><br>
*
*
*
* @param value
* @return
*/
@ -143,7 +144,7 @@ public class Convert
* Short<br>
* <code>null</code><br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -181,7 +182,7 @@ public class Convert
* Short<br>
* <code>null</code><code>null</code><br>
*
*
*
* @param value
* @return
*/
@ -194,7 +195,7 @@ public class Convert
* Number<br>
* <br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -228,7 +229,7 @@ public class Convert
* Number<br>
* <code>null</code><br>
*
*
*
* @param value
* @return
*/
@ -241,7 +242,7 @@ public class Convert
* int<br>
* <br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -279,7 +280,7 @@ public class Convert
* int<br>
* <code>null</code><code>null</code><br>
*
*
*
* @param value
* @return
*/
@ -290,7 +291,7 @@ public class Convert
/**
* Integer<br>
*
*
* @param str
* @return
*/
@ -301,7 +302,7 @@ public class Convert
/**
* Long<br>
*
*
* @param str
* @return
*/
@ -312,7 +313,7 @@ public class Convert
/**
* Integer<br>
*
*
* @param split
* @param split
* @return
@ -335,7 +336,7 @@ public class Convert
/**
* Long<br>
*
*
* @param split
* @param str
* @return
@ -358,7 +359,7 @@ public class Convert
/**
* String<br>
*
*
* @param str
* @return
*/
@ -369,7 +370,7 @@ public class Convert
/**
* String<br>
*
*
* @param split
* @param split
* @return
@ -383,7 +384,7 @@ public class Convert
* long<br>
* <br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -422,7 +423,7 @@ public class Convert
* long<br>
* <code>null</code><code>null</code><br>
*
*
*
* @param value
* @return
*/
@ -435,7 +436,7 @@ public class Convert
* double<br>
* <br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -474,7 +475,7 @@ public class Convert
* double<br>
* <code>null</code><br>
*
*
*
* @param value
* @return
*/
@ -487,7 +488,7 @@ public class Convert
* Float<br>
* <br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -525,7 +526,7 @@ public class Convert
* Float<br>
* <code>null</code><br>
*
*
*
* @param value
* @return
*/
@ -538,7 +539,7 @@ public class Convert
* boolean<br>
* Stringtruefalseyesokno1,0 <br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -579,7 +580,7 @@ public class Convert
* boolean<br>
* <code>null</code><br>
*
*
*
* @param value
* @return
*/
@ -591,7 +592,7 @@ public class Convert
/**
* Enum<br>
* <br>
*
*
* @param clazz EnumClass
* @param value
* @param defaultValue
@ -627,7 +628,7 @@ public class Convert
/**
* Enum<br>
* <code>null</code><br>
*
*
* @param clazz EnumClass
* @param value
* @return Enum
@ -641,7 +642,7 @@ public class Convert
* BigInteger<br>
* <br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -679,7 +680,7 @@ public class Convert
* BigInteger<br>
* <code>null</code><br>
*
*
*
* @param value
* @return
*/
@ -692,7 +693,7 @@ public class Convert
* BigDecimal<br>
* <br>
*
*
*
* @param value
* @param defaultValue
* @return
@ -738,7 +739,7 @@ public class Convert
* BigDecimal<br>
* <br>
*
*
*
* @param value
* @return
*/
@ -750,7 +751,7 @@ public class Convert
/**
* <br>
* 1ByteByteBuffer 2Arrays.toString
*
*
* @param obj
* @return
*/
@ -762,7 +763,7 @@ public class Convert
/**
* <br>
* 1ByteByteBuffer 2Arrays.toString
*
*
* @param obj
* @param charsetName
* @return
@ -775,7 +776,7 @@ public class Convert
/**
* <br>
* 1ByteByteBuffer 2Arrays.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<Character> 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<Character> 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)
{