163 lines
3.9 KiB
C#
163 lines
3.9 KiB
C#
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
|
||
}
|
||
} |