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();
}
}
}
/************************************************/
本博客内容如果是原著都会在标题后加上(原著)字样,未加者多数为转载.
/************************************************/
查看全文
相关阅读:
[傅里叶变换及其应用学习笔记] 二十五. 线性系统,传递函数,特征值
[傅里叶变换及其应用学习笔记] 二十四. 级联,脉冲响应
[傅里叶变换及其应用学习笔记] 二十三. 线性时不变系统的基本定义
[傅里叶变换及其应用学习笔记] 二十二. 快速傅里叶变换
[傅里叶变换及其应用学习笔记] 二十一. 离散傅里叶变换的矩阵定义,一些性质
[傅里叶变换及其应用学习笔记] 十九. 采样定理在音乐上的应用
mysql误删数据快速恢复
php+js 防止被抓包篡改数据,数据签名校验
IOS 苹果手机fiddler抓包时出现了tunnel to 443 解决方案,亲测有效
php 查找字符串里面中文字符第一次出现的位置,并插入字符串
原文地址:https://www.cnblogs.com/ghfsusan/p/1407017.html
最新文章
C#设计模式之十一享元模式(Flyweight Pattern)【结构型】
C#设计模式之十外观模式(Facade Pattern)【结构型】
C#设计模式之九组合模式(Composite Pattern)【结构型】
C#设计模式之八装饰模式(Decorator Pattern)【结构型】
C#设计模式之七桥接模式(Bridge Pattern)【结构型】
C#设计模式之六适配器模式(Adapter Pattern)【结构型】
C#设计模式之五原型模式(Prototype Pattern)【创建型】
教你如何更优惠的购买阿里云服务器?
dtcms扩展字段取法
VS注释与取消注释快捷键
热门文章
vscode 换行符 变成
himall微信支付
销客多后台分佣发放,提现申请 批量微信付款操异常
hi模板文件报乱码问题
反编译代码遇到的问题
微信支付(销客多)配置
由于出现以下异常,无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull。
[傅里叶变换及其应用学习笔记] 二十八. 高维移位定理
[傅里叶变换及其应用学习笔记] 二十七. 高维傅里叶变换,复习
[傅里叶变换及其应用学习笔记] 二十六. 高维傅里叶变换的推导
Copyright © 2011-2022 走看看