This repository has been archived on 2025-09-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
XericLibrary-OLD/Runtime/MicroLibrary/MacroString.cs
LiRuoChen 42d3fbc69f 修复了枚举状态扩展中隐藏的缺陷;
添加了在列表中随机获取项目的扩展;
添加了数值转中文格式的繁体字库;
2023-10-30 09:40:45 +08:00

163 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Runtime.CompilerServices;
using UnityEngine;
namespace XericLibrary.Runtime.MacroLibrary
{
public static partial class MacroMath
{
#region
/// <summary>
/// 获取此处的物体名称如果带有clone后缀则省略这个后缀
/// </summary>
[MethodImpl(MethodImplOptions.NoInlining)]
public static string GetGameObjectNameWithoutClone(GameObject gameObject)
{
return GetGameObjectNameWithoutClone(gameObject.name);
}
/// <summary>
/// 获取此处的物体名称如果带有clone后缀则省略这个后缀
/// </summary>
[MethodImpl(MethodImplOptions.NoInlining)]
public static string GetGameObjectNameWithoutClone(string gameObjectName)
{
const string cloneSuffix = "(Clone)";
if(gameObjectName.EndsWith(cloneSuffix))
{
int suffixIndex = gameObjectName.LastIndexOf(cloneSuffix);
string nameWithoutClone = gameObjectName.Substring(0, suffixIndex);
return nameWithoutClone;
}
return gameObjectName;
}
#endregion
#region
#if false
/// <summary>
/// 将一个数值转为中文小写格式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string NumberToChinese_Format(int number)
{
CultureInfo cultureInfo = new CultureInfo("zh-CN");
// 使用文化信息中的数字格式来将数字转换为中文
return string.Format(cultureInfo, "{0:R}", number);
// 遗憾的是会报R无效
}
#endif
private static readonly string[] chineseNumber = new string[]
{"零","一","二","三","四","五","六","七","八","九"};
private static readonly string[] chineseDigit = new string[]
{ "","十","百","千","万","十","百","千","亿","十","百","千","亿"};
private static readonly string[] chineseNumber_ComplexFont = new string[]
{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private static readonly string[] chineseDigit_ComplexFont = new string[]
{ "","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","亿"};
/// <summary>
/// 将一个数值转为中文小写格式;
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
private static string NumberToChinese(int number, out bool needFillZero, int digit = 0)
{
needFillZero = false;
// 取消输出最高位的零
if(number == 0)
return "";
// 高位拼接一个当前位
if(number > 0)
{
int digitNumber = number % 10;
var result = NumberToChinese(number / 10, out var fillZero, digit + 1);
// 此处为零,后续可能需要填充一个零
needFillZero = digitNumber == 0;
// 如果此处为零,则等待低位处理填充
var proclitic =
needFillZero ? "" : (fillZero ? chineseNumber[0] : "") + chineseNumber[digitNumber] + chineseDigit[digit] ;
return result + proclitic;
}
// 输出最高位
return chineseNumber[number] + chineseDigit[digit];
}
/// <summary>
/// 将一个数值转为中文小写格式,并确保读写格式满足日常使用;
/// 比如 510会读成五百一十9009会读成九千零九
/// 最大支持到九千亿,理论上并不是它的极限,只要继续套格式即可。
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string NumberToChinese(int number)
{
string guide = "";
// 如果为零直接输出因为单个0没法读
if(number == 0)
return chineseNumber[0];
// 如果为负就在前面加上负
if(number < 0)
guide = "负";
string result;
// 特殊处理
switch(number)
{
case 10:
result = "十";
break;
case 11:
result = "十一";
break;
case 12:
result = "十二";
break;
case 13:
result = "十三";
break;
case 14:
result = "十四";
break;
case 15:
result = "十五";
break;
case 16:
result = "十六";
break;
case 17:
result = "十七";
break;
case 18:
result = "十八";
break;
case 19:
result = "十九";
break;
default:
result = NumberToChinese(Mathf.Abs(number), out var zero);
break;
}
// 合并格式化
return guide + result;
}
#endregion
}
}