unity 阿拉伯数字转中文汉字

直接调用即可

代码如下:

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;

public class ToolShu 
{
    /// <summary>
    /// 阿拉伯数字转换中文汉字  数字大写
    /// </summary>
    public static string Rell(int input) 
    {
        string ret = null;
        int input2 = Math.Abs(input);
        string resource = "零一二三四五六七八九";
        string unit = "个十百千万亿兆京垓秭穰沟涧正载极";
        if (input > Math.Pow(10, 4 * (unit.Length - unit.IndexOf(''))))
        {
            throw new Exception("the input is too big,input:" + input);
        }
        Func<int, List<List<int>>> splitNumFunc = (val) => {
            int i = 0;
            int mod;
            int val_ = val;
            List<List<int>> splits = new List<List<int>>();
            List<int> splitNums;
            do
            {
                mod = val_ % 10;
                val_ /= 10;
                if (i % 4 == 0)
                {
                    splitNums = new List<int>();
                    splitNums.Add(mod);
                    if (splits.Count == 0)
                    {
                        splits.Add(splitNums);
                    }
                    else
                    {
                        splits.Insert(0, splitNums);
                    }
                }
                else
                {
                    splitNums = splits[0];
                    splitNums.Insert(0, mod);
                }
                i++;
            } while (val_ > 0);
            return splits;
        };
        Func<List<List<int>>, string> hommizationFunc = (data) => {
            List<StringBuilder> builders = new List<StringBuilder>();
            for (int i = 0; i < data.Count; i++)
            {
                List<int> data2 = data[i];
                StringBuilder newVal = new StringBuilder();
                for (int j = 0; j < data2.Count;)
                {
                    if (data2[j] == 0)
                    {
                        int k = j + 1;
                        for (; k < data2.Count && data2[k] == 0; k++) ;
                        //个位不是0,前面补一个零
                        newVal.Append('');
                        j = k;
                    }
                    else
                    {
                        newVal.Append(resource[data2[j]]).Append(unit[data2.Count - 1 - j]);
                        j++;
                    }
                }
                if (newVal[newVal.Length - 1] == '' && newVal.Length > 1)
                {
                    newVal.Remove(newVal.Length - 1, 1);
                }
                else if (newVal[newVal.Length - 1] == '')
                {
                    newVal.Remove(newVal.Length - 1, 1);
                }

                if (i == 0 && newVal.Length > 1 && newVal[0] == '' && newVal[1] == '')
                {//一十 --> 十
                    newVal.Remove(0, 1);
                }
                builders.Add(newVal);
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < builders.Count; i++)
            {//拼接
                if (builders.Count == 1)
                {//个位数
                    sb.Append(builders[i]);
                }
                else
                {
                    if (i == builders.Count - 1)
                    {//万位以下的
                        if (builders[i][builders[i].Length - 1] != '')
                        {//十位以上的不拼接"零"
                            sb.Append(builders[i]);
                        }
                    }
                    else
                    {//万位以上的
                        if (builders[i][0] != '')
                        {//零万零亿之类的不拼接
                            sb.Append(builders[i]).Append(unit[unit.IndexOf('') + builders.Count - 1 - i]);
                        }
                    }
                }
            }
            return sb.ToString();
        };
        List<List<int>> ret_split = splitNumFunc(input2);
        ret = hommizationFunc(ret_split);
        if (input < 0) ret = "-" + ret;
        return ret;
    }
    /// <summary>
    /// 转成钱好像也是可以的 阿拉伯数字转成中文大写
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public static string Rel(int input)
    {
        string ret = null;
        int input2 = Math.Abs(input);
        string resource = "零壹贰叁肆伍陆柒捌玖";
        string unit = "个十百千万亿兆京垓秭穰沟涧正载极";
        if (input > Math.Pow(10, 4 * (unit.Length - unit.IndexOf(''))))
        {
            throw new Exception("the input is too big,input:" + input);
        }
        Func<int, List<List<int>>> splitNumFunc = (val) => {
            int i = 0;
            int mod;
            int val_ = val;
            List<List<int>> splits = new List<List<int>>();
            List<int> splitNums;
            do
            {
                mod = val_ % 10;
                val_ /= 10;
                if (i % 4 == 0)
                {
                    splitNums = new List<int>();
                    splitNums.Add(mod);
                    if (splits.Count == 0)
                    {
                        splits.Add(splitNums);
                    }
                    else
                    {
                        splits.Insert(0, splitNums);
                    }
                }
                else
                {
                    splitNums = splits[0];
                    splitNums.Insert(0, mod);
                }
                i++;
            } while (val_ > 0);
            return splits;
        };
        Func<List<List<int>>, string> hommizationFunc = (data) => {
            List<StringBuilder> builders = new List<StringBuilder>();
            for (int i = 0; i < data.Count; i++)
            {
                List<int> data2 = data[i];
                StringBuilder newVal = new StringBuilder();
                for (int j = 0; j < data2.Count;)
                {
                    if (data2[j] == 0)
                    {
                        int k = j + 1;
                        for (; k < data2.Count && data2[k] == 0; k++) ;
                        //个位不是0,前面补一个零
                        newVal.Append('');
                        j = k;
                    }
                    else
                    {
                        newVal.Append(resource[data2[j]]).Append(unit[data2.Count - 1 - j]);
                        j++;
                    }
                }
                if (newVal[newVal.Length - 1] == '' && newVal.Length > 1)
                {
                    newVal.Remove(newVal.Length - 1, 1);
                }
                else if (newVal[newVal.Length - 1] == '')
                {
                    newVal.Remove(newVal.Length - 1, 1);
                }

                if (i == 0 && newVal.Length > 1 && newVal[0] == '' && newVal[1] == '')
                {//一十 --> 十
                    newVal.Remove(0, 1);
                }
                builders.Add(newVal);
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < builders.Count; i++)
            {//拼接
                if (builders.Count == 1)
                {//个位数
                    sb.Append(builders[i]);
                }
                else
                {
                    if (i == builders.Count - 1)
                    {//万位以下的
                        if (builders[i][builders[i].Length - 1] != '')
                        {//十位以上的不拼接"零"
                            sb.Append(builders[i]);
                        }
                    }
                    else
                    {//万位以上的
                        if (builders[i][0] != '')
                        {//零万零亿之类的不拼接
                            sb.Append(builders[i]).Append(unit[unit.IndexOf('') + builders.Count - 1 - i]);
                        }
                    }
                }
            }
            return sb.ToString();
        };
        List<List<int>> ret_split = splitNumFunc(input2);
        ret = hommizationFunc(ret_split);
        if (input < 0) ret = "-" + ret;
        return ret;
    }
}
代码工具

 

 

具体用法:ToolShu.Rell(10086);

 

posted @ 2023-02-28 08:58  剑起苍穹  阅读(178)  评论(0编辑  收藏  举报
/*鼠标点击特效*/