首页 > 其他分享 >unity 阿拉伯数字转中文汉字

unity 阿拉伯数字转中文汉字

时间:2023-02-28 09:14:19浏览次数:35  
标签:Count 中文 int 阿拉伯数字 List Length newVal unity builders

直接调用即可

代码如下:

 

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);

 

标签:Count,中文,int,阿拉伯数字,List,Length,newVal,unity,builders
From: https://www.cnblogs.com/qq2351194611/p/17162668.html

相关文章

  • 关于 MySQL 中文排序问题
    在MySQL数据库中使用UTF-8的编码进行排序会出现不按照中文拼音的顺序排序,而UTF-8是数据库的默认字符集,而且该字符集忽略大小写。解决这个问题的方案有两种:1)把编码......
  • Ubuntu 服务器修改默认语言为中文
      APT方式最快的方法,三步解决 sudoaptupdate sudoaptinstalllanguage-pack-zh-hans sudoupdate-localeLANG=zh_CN.UTF-8##手动修改检查本机已有的语言......
  • WSL2 设置中文显示
    安装语言包 sudoapt-get-yinstalllocalesxfonts-intl-chinesefonts-wqy-microhei 语言环境设置 sudodpkg-reconfigurelocales使用空格键选中en_US.UTF......
  • Unity URP Shader 基础光照
    函数GetMainLight()返回一个数据结构LightstructLight{half3direction;//颜色&强度half3color;//方向halfdistanceAttenuation;//距......
  • Elementui---中文官网
    因为ElementuI采用的是服务器是国外的好像,在国内直接访问会很慢很慢,下面是Elementui中文官网地址:Elementui中文官网https://element.eleme.cn/#/zh-CN/打完收工!......
  • 给wordpress编辑插件fckeditor添加中文字体(原创)
    用​​wordpress​​​建站这些天来觉得自带的编辑器总是那么的力不从心,如是就像这换一个编辑器,google了一下,欢乐fckeditor插件,感觉还算顺手,可是用了几天发现这个字体设置不......
  • 解决Eclipse中文乱码
    使用Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题,Eclipse提供了灵活的设置文件编码格式的选项,我们可以通过设置编码 格式解决乱码问题。在Eclipse可以......
  • 正则表达式大全(持续更新)|| 正则查找中文 || 正则查找注释
    背景:项目中需要快速找到所有的中文翻译成英文的时候,又或者要把所有注释的内容删掉,再或者要针对标点的查询。这里为大家总结了一些常用的正则表达式,和使用方法;使用方......
  • [Unity/C#]委托+协程,依次启动多播委托里协程的方法
    1//委托的定义2publicdelegateIEnumeratorActiveDuringTurn(Player[]otherplayers);34publiceventActiveDuringTurnUEvent;567//依次启动协程......
  • WinRAR 6.11 简体中文版
    软件:WinRAR丨版本:6.11丨平台:Windows丨大小:3.27MB版本特点无广告以英文版做为母版+周明波版官方简体中文升级,并做了部分修改集成Realkey,安装后即是注册版......