zoukankan
html css js c++ java
格式化为中文数字
namespace
Microshaoft
{
using
System;
public
class
ChineseFormat : System.ICustomFormatter, System.IFormatProvider
{
//
如果format Type与当前实例类型相同,则为当前实例,否则为空引用
public
object
GetFormat(Type format)
{
if
(format
==
typeof
(ICustomFormatter))
{
return
this
;
}
return
null
;
}
//
实现Format方法说明:
//
如果您的格式方法不支持格式,则确定正在设置格式的对象是否实现 IFormattable 接口。
//
如果实现,请调用该接口的IFormattable.ToString 方法。
//
否则,调用基础对象的默认 Object.ToString 方法。
public
string
Format(
string
format,
object
arg, IFormatProvider provider)
{
if
(format
==
null
)
{
if
(arg
is
IFormattable)
{
return
((IFormattable) arg).ToString(format, provider);
}
return
arg.ToString();
}
else
{
if
(format
==
"
ChineseFormat
"
)
{
string
[] Nums
=
new
string
[]
{
"
零
"
,
"
壹
"
,
"
贰
"
,
"
叁
"
,
"
肆
"
,
"
伍
"
,
"
陆
"
,
"
柒
"
,
"
捌
"
,
"
玖
"
}
;
//
位 数组
string
[] Digits
=
new
string
[]
{
""
,
"
拾
"
,
"
佰
"
,
"
仟
"
}
;
//
单位 数组
string
[] Units
=
new
string
[]
{
""
,
"
[万]
"
,
"
[亿]
"
,
"
[万亿]
"
}
;
return
ConvertNumberToChinese(arg.ToString(), Nums, Digits, Units);
//
return "***"+arg.ToString();
}
else
{
if
(arg
is
IFormattable)
{
return
((IFormattable) arg).ToString(format, provider);
}
return
arg.ToString();
}
}
}
public
static
string
ConvertNumberToChinese(
string
x,
string
[] Nums,
string
[] Digits,
string
[] Units)
{
string
S
=
""
;
//
返回值
int
p
=
0
;
//
字符位置指针
int
m
=
x.Length
%
4
;
//
取模
//
四位一组得到组数
int
k
=
(m
>
0
?
x.Length
/
4
+
1
: x.Length
/
4
);
//
外层循环在所有组中循环
//
从左到右 高位到低位 四位一组 逐组处理
//
每组最后加上一个单位: "[万亿]","[亿]","[万]"
for
(
int
i
=
k; i
>
0
; i
--
)
{
int
L
=
4
;
if
(i
==
k
&&
m
!=
0
)
{
L
=
m;
}
//
得到一组四位数 最高位组有可能不足四位
string
s
=
x.Substring(p, L);
int
l
=
s.Length;
//
内层循环在该组中的每一位数上循环 从左到右 高位到低位
for
(
int
j
=
0
; j
<
l; j
++
)
{
//
处理改组中的每一位数加上所在位: "仟","佰","拾",""(个)
int
n
=
Convert.ToInt32(s.Substring(j,
1
));
if
(n
==
0
)
{
if
(j
<
l
-
1
&&
Convert.ToInt32(s.Substring(j
+
1
,
1
))
>
0
//
后一位(右低)
&&
!
S.EndsWith(Nums[n]))
{
S
+=
Nums[n];
}
}
else
{
//
处理 1013 一千零"十三", 1113 一千一百"一十三"
if
(
!
(n
==
1
&&
(S.EndsWith(Nums[
0
])
|
S.Length
==
0
)
&&
j
==
l
-
2
))
{
S
+=
Nums[n];
}
S
+=
Digits[l
-
j
-
1
];
}
}
p
+=
L;
//
每组最后加上一个单位: [万],[亿] 等
if
(i
<
k)
//
不是最高位的一组
{
if
(Convert.ToInt32(s)
!=
0
)
{
//
如果所有 4 位不全是 0 则加上单位 [万],[亿] 等
S
+=
Units[i
-
1
];
}
}
else
{
//
处理最高位的一组,最后必须加上单位
S
+=
Units[i
-
1
];
}
}
return
S;
}
}
}
namespace
Test
{
using
System;
using
Microshaoft;
class
AppTest
{
static
void
Main()
{
string
printString
=
String.Empty;
long
i
=
1100000013
;
ChineseFormat fmt
=
new
ChineseFormat();
printString
=
string
.Format(fmt,
"
显示正常格式: {0}
"
, i);
Console.WriteLine(printString);
printString
=
string
.Format(fmt,
"
显示正常格式: {0:C}
"
, i);
Console.WriteLine(printString);
printString
=
string
.Format(fmt,
"
显示自定义格式: {0:ChineseFormat}
"
, i);
Console.WriteLine(printString);
Console.ReadLine();
}
}
}
/************************************************/
本博客内容如果是原著都会在标题后加上(原著)字样,未加者多数为转载.
/************************************************/
查看全文
相关阅读:
Eclipse添加Android library错误的原因
The primitive Java types
TFS怎么查找一个用户提交的所有代码
easyui tabs
错误 CS0012 类型“xxx”在未引用的程序集中定义。必须添加对程序集“xxxx xxxxx”的引用
Sql Server 列转逗号隔开的字符串 和 逆转
DataTable程序分页 不推荐。
EF执行存储过程并且返回DataSet
EF运用成ADO.NET操作返回DataSet或者DataTable
Sql 查询 表名 视图名称等
原文地址:https://www.cnblogs.com/ghfsusan/p/1407017.html
最新文章
使用preloadjs预加载音频文件
使用iview weapp组件 写小程序 tab切换
jdk源码——linkedHashMap——jdk1.7
jdk源码ConcurrentHashMap——jdk1.7
jdk源码hashMap的1.7与1.8的比较
jdk源码——HashMap
jdk源码——LinkedList
单例
多线程笔记——3
多线程笔记——2
热门文章
多线程笔记——1
jdk源码——ArrayList
[Android P][Network data][Notes1]PhoneSwitcher SUBSCRIPTION_CHANGED
[Android P][Network data][Notes1]DcTracker setDataProfile 判断APN modemCognitive and requestNetwork set mApnSetting
Android Alert Dialog解决点击按钮对话框不关闭的问题
Mac OS 下 eclipse中文乱码解决方法(eclipse for mac 中文乱码)
告别ActionBarSherlock——Android.support包也能打造兼容2.x的ActionBar(1)
java语言规范
享元(flyweight)设计模式
在Mac系统上安装Tomcat
Copyright © 2011-2022 走看看