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();
}
}
}
查看全文
相关阅读:
javaweb快速入门-学习笔记
初学者如何学习JAVA(本文网摘收藏)
实施职业发展路线-三界之外无量天
GUI(图形界面编程)
selenium IE自动化问题汇总
python 读取excel数据插入到另外一个excel
一个简单的查询功能的测试思路
python os用法笔记
Python学习笔记(基本功能的使用)
python 调用封装好的模块
原文地址:https://www.cnblogs.com/mrhgw/p/298251.html
最新文章
AtCoder Prefix Median(AGC012)
P4463 [国家集训队] calc
NOI2018 冒泡排序规律证明
P3629 【[APIO2010]巡逻】
ReportNG测试报告的定制修改(二)
ReportNG测试报告的定制修改(一)
eclipse中类和方法添加作者日期说明
java.net.SocketException: Software caused connection abort: socket write erro
CMD命令行运行带参数的jar
Linux Jenkins配置Git
热门文章
Linux配置jdk环境变量
Mac下Python安装目录
dubbo接口测试
linux 查看系统信息命令
笔记20200426:数据类型及扩展、类型转换、变量、常量、作用域、基本运算符、包机制
笔记20200425:工具、注释、标识符
eclipse怎么把项目发布到tomcat中?
系统集成项目管理工程师(中级)考试筹备
启动提示未安装保护系统驱动
软件实施人员自我提升五步曲(转载)
Copyright © 2011-2022 走看看