zoukankan
html css js c++ java
数字转换成大写金额(C#实现)
//
例如:(new Money(200)).ToString() == "贰佰元"
namespace
Skyiv.Util
{
using
System.Text;
class
Test
{
static
void
Main()
{
for
(;;)
{
System.Console.Write(
"
金额:
"
);
string
s
=
System.Console.ReadLine();
decimal
m;
try
{ m
=
decimal
.Parse(s); }
catch
{
break
; }
System.Console.WriteLine(
"
大写:
"
+
new
Money(m));
}
}
}
//
该类重载的 ToString() 方法返回的是大写金额字符串
class
Money
{
public
string
Yuan
=
"
元
"
;
//
“元”,可以改为“圆”、“卢布”之类
public
string
Jiao
=
"
角
"
;
//
“角”,可以改为“拾”
public
string
Fen
=
"
分
"
;
//
“分”,可以改为“美分”之类
static
string
Digit
=
"
零壹贰叁肆伍陆柒捌玖
"
;
//
大写数字
bool
isAllZero
=
true
;
//
片段内是否全零
bool
isPreZero
=
true
;
//
低一位数字是否是零
bool
Overflow
=
false
;
//
溢出标志
long
money100;
//
金额*100,即以“分”为单位的金额
long
value;
//
money100的绝对值
StringBuilder sb
=
new
StringBuilder();
//
大写金额字符串,逆序
//
只读属性: "零元"
public
string
ZeroString
{
get
{
return
Digit[
0
]
+
Yuan; }
}
//
构造函数
public
Money(
decimal
money)
{
try
{ money100
=
(
long
)(money
*
100m); }
catch
{ Overflow
=
true
; }
if
(money100
==
long
.MinValue) Overflow
=
true
;
}
//
重载 ToString() 方法,返回大写金额字符串
public
override
string
ToString()
{
if
(Overflow)
return
"
金额超出范围
"
;
if
(money100
==
0
)
return
ZeroString;
string
[] Unit
=
{ Yuan,
"
万
"
,
"
亿
"
,
"
万
"
,
"
亿亿
"
}
;
value
=
System.Math.Abs(money100);
ParseSection(
true
);
for
(
int
i
=
0
; i
<
Unit.Length
&&
value
>
0
; i
++
)
{
if
(isPreZero
&&
!
isAllZero) sb.Append(Digit[
0
]);
if
(i
==
4
&&
sb.ToString().EndsWith(Unit[
2
]))
sb.Remove(sb.Length
-
Unit[
2
].Length, Unit[
2
].Length);
sb.Append(Unit[i]);
ParseSection(
false
);
if
((i
%
2
)
==
1
&&
isAllZero)
sb.Remove(sb.Length
-
Unit[i].Length, Unit[i].Length);
}
if
(money100
<
0
) sb.Append(
"
负
"
);
return
Reverse();
}
//
解析“片段”: “角分(2位)”或“万以内的一段(4位)”
void
ParseSection(
bool
isJiaoFen)
{
string
[] Unit
=
isJiaoFen
?
new
string
[]
{ Fen, Jiao }
:
new
string
[]
{
""
,
"
拾
"
,
"
佰
"
,
"
仟
"
}
;
isAllZero
=
true
;
for
(
int
i
=
0
; i
<
Unit.Length
&&
value
>
0
; i
++
)
{
int
d
=
(
int
)(value
%
10
);
if
(d
!=
0
)
{
if
(isPreZero
&&
!
isAllZero) sb.Append(Digit[
0
]);
sb.AppendFormat(
"
{0}{1}
"
, Unit[i], Digit[d]);
isAllZero
=
false
;
}
isPreZero
=
(d
==
0
);
value
/=
10
;
}
}
//
反转字符串
string
Reverse()
{
StringBuilder sbReversed
=
new
StringBuilder();
for
(
int
i
=
sb.Length
-
1
; i
>=
0
; i
--
)
sbReversed.Append(sb[i]);
return
sbReversed.ToString();
}
}
}
查看全文
相关阅读:
CSS选择器实现搜索功能 驱动过滤搜索技术
js实现倒计时 类似团购网站
SQL Server系统表sysobjects介绍与使用
四种开机的奇葩方法 设置定时开机
sass 使用小记
flex 弹性布局
margin padding width height left top right bottom 百分比
vue中canvas 实现手势密码
babel-polyfill(解决浏览器不支持es6的问题)和es6-promise(解决不支持promise的问题)
Ajax fetch axios的区别与优缺点
原文地址:https://www.cnblogs.com/mrhgw/p/298251.html
最新文章
转: ES6异步编程:Thunk函数的含义与用法
转: ES6异步编程:Generator 函数的含义与用法
转:CSS3 Flexbox 布局介绍
转载:Ajax及 GET、POST 区别
Less基础教程
director.js教程
软件设计是怎样炼成的(6)——打造系统的底蕴(数据库设计)(下篇)
软件设计是怎样炼成的(6)——打造系统的底蕴(数据库设计)(上篇)
敏捷遇上UML——软创基地马年大会(深圳站 2014-3-15)
软件设计是怎样炼成的(5)——规划系统的骨架(架构设计)(下篇)
热门文章
软件设计是怎样炼成的(5)——规划系统的骨架(架构设计)(上篇)
软件设计是怎样炼成的(4)——软件设计的“大道理”
软件设计是怎样炼成的(3)——软件系统不是木桶型的
软件设计是怎样炼成的(2)——优秀设计从分析需求开始
软件设计是怎样炼成的(1)——什么是优秀的设计?
挨踢项目求生法则——计划篇,计划赶不上变化!
Windows平台分布式架构实践
SQL Server 2012 各版本功能比较
[SQL SERVER 2005]数据库差异备份及还原
两个数据库比较 对比视图存储过程及表结构差异
Copyright © 2011-2022 走看看