using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AmountOfConversion
{
/// <summary>
/// 金額轉換
/// </summary>
public class Program
{
static void Main(string[] args)
{
string cash = Console.ReadLine();
Console.WriteLine(new Amount().CmycurD(cash));
Console.ReadKey();
}
}
public class Amount
{
private static String[] ChinaNum = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };
private static String[] unitI = { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万" };
private static String[] unitII = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万" };
private static String[] unitIII = { "角", "分" };
/// <summary>
/// 转换人民币大小金额
/// </summary>
/// <param name="num">金额</param>
/// <returns>返回大写形式</returns>
public string CmycurD(decimal num)
{
Boolean hasPoint = false;
bool isInt = true;
string strNum;//整个数字字符串
string strNumInt;//整数部分
string strNumPoint = "";//小数部分
string result = "";//返回的字符串
num = Math.Round(num, 2);//四舍五入取两位
//各种非正常情况处理
if (num < 0)
throw new Exception("不转换欠条");
else if (num > Convert.ToDecimal(9999999999999.99))
throw new Exception("很难想象谁会有这么多钱!");
else if (num == 0)
return ChinaNum[0];
//***************************************************************
strNum = num.ToString();
//分开整数与小数处理
if (strNum.Contains("."))
{
int pointIndex = strNum.IndexOf(".");
strNumInt = strNum.Substring(0, pointIndex);
strNumPoint = strNum.Substring(pointIndex + 1);
hasPoint = true;
isInt = false;
}
else
{
strNumInt = strNum;
strNumPoint = String.Empty;
hasPoint = false;
}
//整数部分处理
if (Convert.ToInt32(strNumInt) > 0)
{
strNumInt = Reverse(strNumInt);
for (int i = 0; i < strNumInt.Length; i++)
{
string strChar = strNumInt.Substring(i, 1);
if (int.Parse(strChar) != 0)
result = ChinaNum[int.Parse(strChar)] + unitI[i] + result;
else if (i == 0 || i == 4 || i == 8)
{
if (strNumInt.Length > 8 && i == 4)
continue;
result = unitI[i] + result;
}
else if (int.Parse(strNumInt.Substring(i - 1, 1)) != 0)
result = ChinaNum[int.Parse(strChar)] + result;
}
if (!hasPoint)
return result + "整";
}
//小数部分处理
if (Convert.ToInt32(strNumInt) > 0)
{
for (int i = 0; i < strNumPoint.Length; i++)
{
string strChar = strNumPoint.Substring(i, 1);
if (int.Parse(strChar) != 0)
result += ChinaNum[int.Parse(strChar)] + unitIII[i];
else if (i != 1 && isInt)
result += ChinaNum[int.Parse(strChar)];
}
}
return result;
}
/// <summary>
/// 一个重载,将字符串先转换成数字在调用CmycurD(decimal num)
/// </summary>
/// <param name="num">用户输入的金额,字符串形式未转成decimal</param>
/// <returns></returns>
public string CmycurD(string numstr)
{
try
{
decimal num = Convert.ToDecimal(numstr);
return CmycurD(num);
}
catch (Exception ex)
{
return ex.Message;
}
}
/// <summary>
/// 反转字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string Reverse(string str)
{
string strReturn = "";
foreach (char c in str)
{
strReturn = c + strReturn;
}
return strReturn;
}
}
}