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();
}
}
}
查看全文
相关阅读:
vue computed watch 使用区别
element 问题
vue vue.config.js
vue 路由
算法
《概率统计》10.变与不变:马尔科夫链的极限与稳态
《概率统计》9.状态转移:初识马尔科夫链
《概率统计》8.由静向动:随机过程导引
《概率统计》7.统计推断:寻找最大似然与最大后验
《概率统计》6.推断未知:统计推断的基本框架
原文地址:https://www.cnblogs.com/mrhgw/p/298251.html
最新文章
封装
面向对象编程
常用模块
软件开发目录规范
包
join的用法
怎么做展开和收缩
怎么判断时间是不是在2天前
如果要对一些数据做处理,可以直接用自定义fliter
如果要对img里面的值做特殊处理,可以直接写方法
热门文章
如果判断条件过多,可以直接在computed里面去返回需要判断的数据
怎么在浏览器设置cookie
超级简单的tab点击
怎么去判断返回的数据类型是时间类型呢?
将对象转化为数组,并且适用select下拉
parcel
@media
html 标签
MongoDB
vedio
Copyright © 2011-2022 走看看