|
@@ -54,37 +54,37 @@ namespace Masuit.Tools.Strings
|
|
|
|
|
|
#if NET5_0_OR_GREATER
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 数制格式化器
|
|
|
- /// </summary>
|
|
|
- /// <param name="characters">符号集</param>
|
|
|
- /// <param name="offset">起始值偏移</param>
|
|
|
- public NumberFormater(ReadOnlySpan<byte> characters, byte offset = 0)
|
|
|
- {
|
|
|
- if (characters == null || characters.Length == 0)
|
|
|
- {
|
|
|
- throw new ArgumentException("符号集不能为空");
|
|
|
- }
|
|
|
-
|
|
|
- Characters = Encoding.UTF8.GetString(characters);
|
|
|
- _offset = offset;
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 数制格式化器
|
|
|
- /// </summary>
|
|
|
- /// <param name="characters">符号集</param>
|
|
|
- /// <param name="offset">起始值偏移</param>
|
|
|
- public NumberFormater(ReadOnlySpan<char> characters, byte offset = 0)
|
|
|
- {
|
|
|
- if (characters == null || characters.Length == 0)
|
|
|
- {
|
|
|
- throw new ArgumentException("符号集不能为空");
|
|
|
- }
|
|
|
-
|
|
|
- Characters = new string(characters);
|
|
|
- _offset = offset;
|
|
|
- }
|
|
|
+ /// <summary>
|
|
|
+ /// 数制格式化器
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="characters">符号集</param>
|
|
|
+ /// <param name="offset">起始值偏移</param>
|
|
|
+ public NumberFormater(ReadOnlySpan<byte> characters, byte offset = 0)
|
|
|
+ {
|
|
|
+ if (characters == null || characters.Length == 0)
|
|
|
+ {
|
|
|
+ throw new ArgumentException("符号集不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ Characters = Encoding.UTF8.GetString(characters);
|
|
|
+ _offset = offset;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 数制格式化器
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="characters">符号集</param>
|
|
|
+ /// <param name="offset">起始值偏移</param>
|
|
|
+ public NumberFormater(ReadOnlySpan<char> characters, byte offset = 0)
|
|
|
+ {
|
|
|
+ if (characters == null || characters.Length == 0)
|
|
|
+ {
|
|
|
+ throw new ArgumentException("符号集不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ Characters = new string(characters);
|
|
|
+ _offset = offset;
|
|
|
+ }
|
|
|
|
|
|
#endif
|
|
|
|
|
@@ -438,33 +438,33 @@ namespace Masuit.Tools.Strings
|
|
|
{
|
|
|
var m = number.ConvertTo<decimal>();
|
|
|
/*
|
|
|
- #:用数字替换字符位置,如果数字小于对应值的位数,则在左侧填充零。
|
|
|
- L:将整数转换为一个字符串,并将其转换为小写字母形式。
|
|
|
- E:将数字格式化为科学计数法,并使用大写字母 E 表示指数。
|
|
|
- D:将数字格式化为整数,并使用逗号分隔数字组。
|
|
|
- C:将数字转换为货币格式,并使用本地货币符号。
|
|
|
- K:将数字格式化为千位分隔数字,使用 K 表示千。
|
|
|
- J:将数字格式化为十位分隔数字,使用 J 表示十。
|
|
|
- I:将数字格式化为百位分隔数字,使用 I 表示百。
|
|
|
- H:将数字格式化为千万位分隔数字,使用 H 表示千万。
|
|
|
- G:将数字格式化为一般格式,根据数字的大小和精度选择固定点或科学计数法表示。
|
|
|
- F:将数字格式化为固定点格式,并指定小数位数。
|
|
|
- .0:指定小数点后的位数为零。
|
|
|
- B:将数字转换为二进制格式。
|
|
|
- A:将数字转换为 ASCII 字符。
|
|
|
- */
|
|
|
+ #:用数字替换字符位置,如果数字小于对应值的位数,则在左侧填充零。
|
|
|
+ L:将整数转换为一个字符串,并将其转换为小写字母形式。
|
|
|
+ E:将数字格式化为科学计数法,并使用大写字母 E 表示指数。
|
|
|
+ D:将数字格式化为整数,并使用逗号分隔数字组。
|
|
|
+ C:将数字转换为货币格式,并使用本地货币符号。
|
|
|
+ K:将数字格式化为千位分隔数字,使用 K 表示千。
|
|
|
+ J:将数字格式化为十位分隔数字,使用 J 表示十。
|
|
|
+ I:将数字格式化为百位分隔数字,使用 I 表示百。
|
|
|
+ H:将数字格式化为千万位分隔数字,使用 H 表示千万。
|
|
|
+ G:将数字格式化为一般格式,根据数字的大小和精度选择固定点或科学计数法表示。
|
|
|
+ F:将数字格式化为固定点格式,并指定小数位数。
|
|
|
+ .0:指定小数点后的位数为零。
|
|
|
+ B:将数字转换为二进制格式。
|
|
|
+ A:将数字转换为 ASCII 字符。
|
|
|
+ */
|
|
|
var s = m.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
|
|
|
|
|
|
/*
|
|
|
- * ((?<=-|^)[^1-9]*): 匹配负号(如果存在),并且匹配在小数点前面的所有非数字字符。
|
|
|
- * ((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$)))): 匹配小数点前面的数字。首先匹配一个零,然后匹配任意数量的零到 E 的字母。接下来,它匹配非零数字,或者如果遇到了小数点、字母 F-L 或者字符串的结尾,它会匹配上一个“-z”(即前面匹配的零)。
|
|
|
- * ((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\ .]|$)))): 匹配小数点后面的数字。首先匹配字母 F-L,并将其存储在组“b”中。接着,它匹配一个零,并将其存储在组“z”中。然后,它匹配任意数量的零到字母 L 的字母。最后,匹配非零数字,或者如果遇到了小数点或字符串的结尾,它会匹配上一个“-z”(即前面匹配的零)。
|
|
|
- */
|
|
|
+ * ((?<=-|^)[^1-9]*): 匹配负号(如果存在),并且匹配在小数点前面的所有非数字字符。
|
|
|
+ * ((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$)))): 匹配小数点前面的数字。首先匹配一个零,然后匹配任意数量的零到 E 的字母。接下来,它匹配非零数字,或者如果遇到了小数点、字母 F-L 或者字符串的结尾,它会匹配上一个“-z”(即前面匹配的零)。
|
|
|
+ * ((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\ .]|$)))): 匹配小数点后面的数字。首先匹配字母 F-L,并将其存储在组“b”中。接着,它匹配一个零,并将其存储在组“z”中。然后,它匹配任意数量的零到字母 L 的字母。最后,匹配非零数字,或者如果遇到了小数点或字符串的结尾,它会匹配上一个“-z”(即前面匹配的零)。
|
|
|
+ */
|
|
|
var d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\ .]|$))))", "${b}${z}");
|
|
|
|
|
|
/*
|
|
|
- * 将其转换为对应的中文大写字符,例如将'1'转换为'壹',将'2'转换为'贰',以此类推。Lambda表达式中使用了一个映射表,通过字符的ASCII码值来查找对应的中文字符。
|
|
|
- */
|
|
|
+ * 将其转换为对应的中文大写字符,例如将'1'转换为'壹',将'2'转换为'贰',以此类推。Lambda表达式中使用了一个映射表,通过字符的ASCII码值来查找对应的中文字符。
|
|
|
+ */
|
|
|
return Regex.Replace(d, ".", m => "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"[m.Value[0] - '-'].ToString()).Next(x => m < 0 ? "负" + x : x);
|
|
|
}
|
|
|
}
|