C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字
项目中经常会格式化数据,转换数字的使用情况比较多,记录一下数字转换的方法!
如果需要转换为繁体中文,将数组里的汉字换成繁体中文即可。
1.阿拉伯数字转换为中文数字
/// <summary>
/// 阿拉伯数字转换成中文数字
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
public string NumToChinese(string x)
{
string[] pArrayNum = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
//为数字位数建立一个位数组
string[] pArrayDigit = { "", "十", "百", "千" };
//为数字单位建立一个单位数组
string[] pArrayUnits = { "", "万", "亿", "万亿" };
var pStrReturnValue = ""; //返回值
var finger = ; //字符位置指针
var pIntM = x.Length % ; //取模
int pIntK;
if (pIntM > )
pIntK = x.Length / + ;
else
pIntK = x.Length / ;
//外层循环,四位一组,每组最后加上单位: ",万亿,",",亿,",",万,"
for (var i = pIntK; i > ; i--)
{
var pIntL = ;
if (i == pIntK && pIntM != )
pIntL = pIntM;
//得到一组四位数
var four = x.Substring(finger, pIntL);
var P_int_l = four.Length;
//内层循环在该组中的每一位数上循环
for (int j = ; j < P_int_l; j++)
{
//处理组中的每一位数加上所在的位
int n = Convert.ToInt32(four.Substring(j, ));
if (n == )
{
if (j < P_int_l - && Convert.ToInt32(four.Substring(j + , )) > && !pStrReturnValue.EndsWith(pArrayNum[n]))
pStrReturnValue += pArrayNum[n];
}
else
{
if (!(n == && (pStrReturnValue.EndsWith(pArrayNum[]) | pStrReturnValue.Length == ) && j == P_int_l - ))
pStrReturnValue += pArrayNum[n];
pStrReturnValue += pArrayDigit[P_int_l - j - ];
}
}
finger += pIntL;
//每组最后加上一个单位:",万,",",亿," 等
if (i < pIntK) //如果不是最高位的一组
{
if (Convert.ToInt32(four) != )
//如果所有4位不全是0则加上单位",万,",",亿,"等
pStrReturnValue += pArrayUnits[i - ];
}
else
{
//处理最高位的一组,最后必须加上单位
pStrReturnValue += pArrayUnits[i - ];
}
}
return pStrReturnValue;
}
2.中文数字转换为阿拉伯数字
/// <summary>
/// 转换数字
/// </summary>
protected static long CharToNumber(char c)
{
switch (c)
{
case '一': return ;
case '二': return ;
case '三': return ;
case '四': return ;
case '五': return ;
case '六': return ;
case '七': return ;
case '八': return ;
case '九': return ;
case '零': return ;
default: return -;
}
} /// <summary>
/// 转换单位
/// </summary>
protected static long CharToUnit(char c)
{
switch (c)
{
case '十': return ;
case '百': return ;
case '千': return ;
case '万': return ;
case '亿': return ;
default: return ;
}
}
/// <summary>
/// 将中文数字转换阿拉伯数字
/// </summary>
/// <param name="cnum">汉字数字</param>
/// <returns>长整型阿拉伯数字</returns>
public static long ParseCnToInt(string cnum)
{
cnum = Regex.Replace(cnum, "\\s+", "");
long firstUnit = ;//一级单位
long secondUnit = ;//二级单位
long result = ;//结果
for (var i = cnum.Length - ; i > -; --i)//从低到高位依次处理
{
var tmpUnit = CharToUnit(cnum[i]);//临时单位变量
if (tmpUnit > firstUnit)//判断此位是数字还是单位
{
firstUnit = tmpUnit;//是的话就赋值,以备下次循环使用
secondUnit = ;
if (i == )//处理如果是"十","十一"这样的开头的
{
result += firstUnit * secondUnit;
}
continue;//结束本次循环
}
if (tmpUnit > secondUnit)
{
secondUnit = tmpUnit;
continue;
}
result += firstUnit * secondUnit * CharToNumber(cnum[i]);//如果是数字,则和单位想乘然后存到结果里
}
return result;
}
C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字的更多相关文章
- 禁止输入中文 与 禁止输入数字在phonegap api环境效果
例子如下: <!doctype html> <html> <head> <meta charset="utf-8"> <tit ...
- 包含中文字符的NSString 转换为NSURL
转包含中文字符的NSString 转换为NSURL NSString中如果包括中文字符的话转换为NSURL得到的值为nil,在网上搜了下,用stringByAddingPercentEscapesUs ...
- SQL Server判断某个字段是否包含中文/英文字符/数字
原文:SQL Server判断某个字段是否包含中文/英文字符/数字 因最近在清理系统中的脏数据,需要查询某个字段是否包含中文/英文字符/数字的数据, 比较简单,仅以此篇博客做一个简单总结,方便以后查阅 ...
- JavaScript 正则匹配中文,中文符号,空格,全数字,以https:// 开头的url,用于各种场景的输入校验
业务场景1: 密码输入框需要验证输入中文,中文符号,空格等情况,以便于给出错误提示 业务场景2: 输入框只允许输入数字的情况 业务场景3: 输入框允许输入均为数字或以https:// 开头的url的情 ...
- JS验证只能输入数字,数字和字母等的正则表达式
JS判断只能是数字和小数点 0.不能输入中文1)<input onpaste="return false;" type="text" name=" ...
- HTML输入框只能输入数字或数字字母组合
JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'' ...
- replace限制文本框只能输入数字,数字和字母等的正则表达式
1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...
- Excel表格文本格式的数字和数字格式如何批量转换
Excel表格文本格式的数字和数字格式如何批量转换 在使用Excel表格对数据求和时,只能对单元格内常规格式的数据进行计算,而不能对单元格中的文本格式的数据进行计算,特点就是在单元格的左上角有一个绿色 ...
- 为什么 execute(`echo 中文`) 输出中文源码?
为什么 execute(echo 中文) 输出中文源码? import win.ui; /*DSG{{*/ var winform = win.form(text="管道演示";r ...
随机推荐
- ActiveMQ相关API
一.Producer 1,发送消息 MessageProducer send(Message message)发送消息到默认目的地,就是创建Producer时指定的目的地. send(Destinat ...
- Socket: java Socket的isConnected()、和isClosed()判断是否在线的问题(转)
首先,很多初学者都会用这两个API来判断对方是否在线,但是经过我的实践,此API并不能实时判断是否在线的状态. 经过百度查询资料后,得出结论: 事实上这些方法都是访问socket在内存驻留的状态,当s ...
- Oracle 获取表的主键、外键以及唯一约束条件
Oracle 获取表的主键.外键以及唯一约束条件 Select a.Owner 主键拥有者, a.table_name 主键表, b.Column_Name 主键列, b.Constraint_Nam ...
- ThreadPoolExecutor 定制线程池参数
在 java 开发中经常需要执行一些“规格化”的任务,此时可以使用 java 线程池.节省创建线程时间,任务来时即可执行,高效. java 包是 java.util.concurrent .创建线程池 ...
- ubuntu上安装jdk
使用安装包安装:JDK官网下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.h ...
- VS Code 通过文件名查询文件并打开
On Windows press Ctrl+p or Ctrl+e On Mac press Cmd+p on the Linux press also Ctrl+p works Older Mac ...
- Vue动态路由 Get传值
<template> <!-- 所有的内容要被根节点包含起来 --> <div id="home"> 我是首页组件 <ul> < ...
- Vue绑定属性 绑定Class 绑定style
<template> <div id="app"> <h2>{{msg}}</h2> <br> <div v-bi ...
- Python - Django - request 对象
request.method: 获取请求的方法,例如 GET.POST 等 views.py: from django.shortcuts import render, HttpResponse # ...
- akka java
https://www.cnblogs.com/lixiang-share/p/5833846.html