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

简介: 阿拉伯数字转中文汉字

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

相关文章
|
存储 监控 Linux
在 CentOS 7 中如何进行磁盘分区和挂载的最佳实践。
【10月更文挑战第7天】本文详细介绍了在 CentOS 7 中如何进行磁盘分区和挂载的最佳实践。通过合理规划和管理磁盘空间,可以提高系统的稳定性和可维护性。具体步骤包括确认未使用的硬盘、创建分区、格式化分区、创建挂载点、挂载分区以及编辑 `/etc/fstab` 文件实现永久挂载。此外,还分享了备份数据、分区规划、权限设置和监控磁盘使用等最佳实践。这些技能对 IT 专业人员来说至关重要。
1133 3
|
存储 前端开发 数据可视化
3D激光SLAM:LeGO-LOAM---两步优化的帧间里程计及代码分析
**LeGO-LOAM**的全称是 Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain 其中LeGO就是轻量级和利用地面优化,轻量级的实现就是通过两步的优化方式,利用地面优化的部分也在两步优化的第一步中。 和原始LOAM一样,通过前后两帧点云来估计两帧之间的运动,从而累加得到前端里程计的输出,和上述方法使用线面约束同时优化六自由度帧间位姿不同,LeGO-LOAM的前端分成两个步骤,每个步骤估计三自由度的变量。 通过这种方式进行帧间里程计的运算,可以提供运算效率,使得可以在嵌入式平台
3D激光SLAM:LeGO-LOAM---两步优化的帧间里程计及代码分析
|
23天前
|
人工智能 JavaScript 开发工具
DeepSeek Harness完整实操入门:Cordis插件内核、本地部署、SDK开发、模式选型、SDK示例、优劣分析、与排坑全解
DeepSeek Harness提供一套开源Agent运行时底座,打通大模型推理能力和本地文件、系统命令执行环境。依托Cordis插件内核,实现极高的可扩展能力,强化本地权限管控与完整执行链路可追溯。它不是拿来直接聊天的成品软件,而是供开发者搭建、调试、评测智能体的底层底座。
370 0
|
24天前
|
人工智能 JavaScript 程序员
DeepSeek 官方竟然偷偷做了 Harness 桌面端,我已经用上了。。
DeepSeek 官方竟然下场给 DSH 做桌面端了,期待一波,可能是未来最好的 AI 编程工具么?2 分钟教你怎么提前用上,吃一波螃蟹
920 0
|
5月前
|
设计模式 安全 Shell
工作流的 Skill 怎么写?从 7 个顶级 Skill 中提炼的模式与最佳实践
Skill 是一种基于 YAML frontmatter + Markdown 的知识注入机制,通过 `SKILL.md` 文件将结构化指令注入 LLM 上下文,由其调用内置工具(如 bash、read)执行。含 5 大设计模式:线性流程、决策树、循环迭代、接力棒循环、多阶段编排,另含思维框架模式,专用于控制 LLM 深度分析而非操作执行。
|
10月前
|
人工智能 前端开发 JavaScript
4.6 前端(Cursor)-页面布局
使用Sealos DevBox创建Vue项目,通过Cursor开发。执行`npm run dev`启动,访问公网地址即可预览。基于Vue3+ElementPlus实现“智学云帆”布局:顶部标题、右侧登录信息、左侧菜单,右侧动态页面。优化背景色、宽度及响应式,首页设计简洁大气,提升整体视觉体验。(238字)
|
10月前
|
关系型数据库 MySQL Shell
Docker
本文介绍Docker下载加速的两种方法:一是使用网易数帆、阿里云等镜像仓库,如`hub.c.163.com/library/mysql`;二是配置阿里云专属加速器地址至`/etc/docker/daemon.json`,提升官方镜像拉取速度。同时支持在`daemon.json`中设置HTTP/HTTPS代理,适用于科学上网环境。配置后重启Docker服务即可生效,显著提升镜像下载效率。(239字)
|
存储 图形学 索引
unity 使物体跟随路径点自动移动位置
在Unity中,物体沿路径点自动移动的核心原理是通过预设路径点,控制物体依次移动。路径点可用空对象或三维向量数组定义,并按顺序存储。移动时,计算当前位置与下一个路径点的向量差以确定方向,使用`Vector3.MoveTowards`逐步靠近目标点。代码实现包括路径点设置、移动控制及插值计算,确保物体平滑移动和旋转。
|
人工智能 自然语言处理 Java
IDEA中使用DeepSeek满血版的手把手教程来了!
本文主要介绍阿里云推出的AI编码助手——通义灵码在代码编写、智能问答、bug修复等方面的功能。
IDEA中使用DeepSeek满血版的手把手教程来了!
|
存储 JSON Ubuntu
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?