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();
}
}
}
/************************************************/
本博客内容如果是原著都会在标题后加上(原著)字样,未加者多数为转载.
/************************************************/
查看全文
相关阅读:
POJ2481(树状数组:统计数字 出现个数)
jenkins(2)-linux环境下jenkins启动/重启/停止命令
jenkins(1)-部分插件由于缺少依赖无法加载。要恢复这些插件提供的功能,需要修复这些问题并重启Jenkins的解决办法
linux(4)-rpm包安装
charles(2)-charles如何打断点,修改Request数据
charles(1)-charles如何打断点,修改Response数据
linux(3)-普通用户如何切换到root
jmeter(51) Groovy脚本高级实战
jmeter(49)-jenkins+ant+jmeter持续集成接口自动化测试-(linux环境)
Codeforces Round #545 (Div. 2)D(KMP,最长公共前后缀,贪心)
原文地址:https://www.cnblogs.com/ghfsusan/p/1407017.html
最新文章
119.Pascal's Triangle II
HDU-- Buy Tickets
HDU1394-Minimum Inversion Number
HDU-2975 Billboard
HDU 1556 Color the ball
HDU- 1754 I Hate It
HDU-1166 敌兵布阵
HDU-1412 {A} + {B}
HDU-1406 完数
HDU-1395 2^x mod n = 1
热门文章
HDU-1391 Number Steps
POJ3268(最短路)
POJ1797(dijkstra求最短最长边)
POJ2253(djkstra求最长最短边)
蓝桥杯(道路与航路)
POJ2387(最短路入门)
HDU4391(线段树+剪枝)
POJ2887(块状链表)
POJ1195(二维树状数组)
POJ3067(树状数组:统计数字出现个数)
Copyright © 2011-2022 走看看