轉載:http://www.oschina.net/code/snippet_102306_4705c#
1.JS實現方法spa
static string ConvertToChinese(double x)
{
string s = x.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
return Regex.Replace(d, ".", m => "負元空零壹貳叄肆伍陸柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"[m.Value[0] - '-'].ToString());
} .net
2.C#實現方法code
private
static
String[] Ls_ShZ ={
"零"
,
"壹"
,
"貳"
,
"叄"
,
"肆"
,
"伍"
,
"陸"
,
"柒"
,
"捌"
,
"玖"
,
"拾"
};
private
static
String[] Ls_DW_Zh ={
"元"
,
"拾"
,
"佰"
,
"仟"
,
"萬"
,
"拾"
,
"佰"
,
"仟"
,
"億"
,
"拾"
,
"佰"
,
"仟"
,
"萬"
};
private
static
String[] Num_DW ={
""
,
"拾"
,
"佰"
,
"仟"
,
"萬"
,
"拾"
,
"佰"
,
"仟"
,
"億"
,
"拾"
,
"佰"
,
"仟"
,
"萬"
};
private
static
String[] Ls_DW_X ={
"角"
,
"分"
};
/// <summary>
/// 金額小寫轉中文大寫。
/// 整數支持到萬億;小數部分支持到分(超過兩位將進行Banker舍入法處理)
/// </summary>
/// <param name="Num">須要轉換的雙精度浮點數</param>
/// <returns>轉換後的字符串</returns>
public
static
String NumGetStr(Double Num)
{
Boolean iXSh_bool =
false
;
//是否含有小數,默認沒有(0則視爲沒有)
Boolean iZhSh_bool =
true
;
//是否含有整數,默認有(0則視爲沒有)
string
NumStr;
//整個數字字符串
string
NumStr_Zh;
//整數部分
string
NumSr_X =
""
;
//小數部分
string
NumStr_DQ;
//當前的數字字符
string
NumStr_R =
""
;
//返回的字符串
Num = Math.Round(Num, 2);
//四捨五入取兩位
//各類非正常狀況處理
if
(Num < 0)
return
"不轉換欠條"
;
if
(Num > 9999999999999.99)
return
"很難想象誰會有這麼多錢!"
;
if
(Num == 0)
return
Ls_ShZ[0];
//判斷是否有整數
if
(Num < 1.00)
iZhSh_bool =
false
;
NumStr = Num.ToString();
NumStr_Zh = NumStr;
//默認只有整數部分
if
(NumStr_Zh.Contains(
"."
))
{
//分開整數與小數處理
NumStr_Zh = NumStr.Substring(0, NumStr.IndexOf(
"."
));
NumSr_X = NumStr.Substring((NumStr.IndexOf(
"."
) + 1), (NumStr.Length - NumStr.IndexOf(
"."
) - 1));
iXSh_bool =
true
;
}
if
(NumSr_X ==
""
||
int
.Parse(NumSr_X) <= 0)
{
//判斷是否含有小數部分
iXSh_bool =
false
;
}
if
(iZhSh_bool)
{
//整數部分處理
NumStr_Zh = Reversion_Str(NumStr_Zh);
//反轉字符串
for
(
int
a = 0; a < NumStr_Zh.Length; a++)
{
//整數部分轉換
NumStr_DQ = NumStr_Zh.Substring(a, 1);
if
(
int
.Parse(NumStr_DQ) != 0)
NumStr_R = Ls_ShZ[
int
.Parse(NumStr_DQ)] + Ls_DW_Zh[a] + NumStr_R;
else
if
(a == 0 || a == 4 || a == 8)
{
if
(NumStr_Zh.Length > 8 && a == 4)
continue
;
NumStr_R = Ls_DW_Zh[a] + NumStr_R;
}
else
if
(
int
.Parse(NumStr_Zh.Substring(a - 1, 1)) != 0)
NumStr_R = Ls_ShZ[
int
.Parse(NumStr_DQ)] + NumStr_R;
}
if
(!iXSh_bool)
return
NumStr_R +
"整"
;
//NumStr_R += "零";
}
for
(
int
b = 0; b < NumSr_X.Length; b++)
{
//小數部分轉換
NumStr_DQ = NumSr_X.Substring(b, 1);
if
(
int
.Parse(NumStr_DQ) != 0)
NumStr_R += Ls_ShZ[
int
.Parse(NumStr_DQ)] + Ls_DW_X[b];
else
if
(b != 1 && iZhSh_bool)
NumStr_R += Ls_ShZ[
int
.Parse(NumStr_DQ)];
}
return
NumStr_R;
}