浅谈Unity之阿拉伯数字转中文汉字

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,100CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 阿拉伯数字转中文汉字

前言:每日记录自己学习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(100);

相关文章
验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数
验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数
|
存储 编解码 索引
[oeasy]python0131_[趣味拓展]各种符号_汉语拼音符号_中文全角英文字母_中文全角标点
[oeasy]python0131_[趣味拓展]各种符号_汉语拼音符号_中文全角英文字母_中文全角标点
141 0
[oeasy]python0131_[趣味拓展]各种符号_汉语拼音符号_中文全角英文字母_中文全角标点
中文CTEX加下划线无法换行问题
使用Ctex,ulem宏包中下划线命令\uline如果对中文处理,则中文换行失效,需要换成一下Ctex专用宏包。 \usepackage{CJKulem}
2477 0
|
数据库
轻松解决汉字和拼音转换问题!!
轻松解决汉字和拼音转换问题!!
204 0
推荐一个好用的汉字转拼音的插件
前阶段做项目时里面有一个小功能,就是输入名字之后,将其转换成拼音,然后填入另一个需要输入的文本框中,在调查一番后,发现了一个比较符合自己需求的一款插件,
452 0
|
测试技术
汉字数字转阿拉伯数字
# 问题来源 # 这个问题,是看到有人提到带中文数字的章节标题,要排序的问题引起的。比如对于: ```python title_list = [ '第一章', '第三章', '第五章', '第四章', '第二章', ] ``` 想“正确”排序的话,你直接 ``title_list.sort()`` 是不行地: ```bash zys@tower:~$ py
789 0
|
人工智能 C#
C#汉字转拼音代码分享|建议收藏
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.
1413 0

热门文章

最新文章