Rmb.cs
上传用户:yiyuerguo
上传日期:2014-09-27
资源大小:3781k
文件大小:5k
源码类别:

C#编程

开发平台:

Others

  1. using System; 
  2.  
  3. class RenminbiUper 
  4. static string[] UperMoney={"","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; 
  5. static string[] Digit={"","","拾","佰","千"}; 
  6. static string[] Ling={"","零"}; 
  7. static string[] Wan={"","万"}; 
  8. static string[] Yi={"","亿"}; 
  9.        
  10. public static void toUper(System.Decimal num) 
  11. //将传入的num转换为char数组 
  12. char[] moneyNumber;
  13. //如果num是小于1的 比如0.78 经过num.ToString(".00")
  14. //转化后会变成.78 而前面的0会消失掉
  15. //所以要在前面补0
  16. if(num<1)
  17. {moneyNumber=("0"+num.ToString(".00")).ToCharArray(); }
  18. else
  19. //如果num是大于等于1的 则不存在以上的问题
  20.     //转化时将会四舍五入 比如输入的是12.078 转化后会变成12.08
  21. moneyNumber=(num.ToString(".00")).ToCharArray(); 
  22. Console.WriteLine(moneyNumber);
  23. int length=moneyNumber.Length; 
  24. int curDigit;        //当前的位数 
  25. int curValue;        //当前位数的值 
  26. int perValue=1;      //前一位的值(用于判断前一位是否为零) 
  27. int indexOfDigit;    //确定数字的后缀(拾、佰、千)在数组中的下标 
  28. //根据前一位的数是否为零来决定是否显示"零"(数组Ling的下标) 
  29. int perValueIsZero;  
  30.  
  31. //决定是否显示"万"(数组Wan的下标) 
  32. int isWan=0; 
  33. //决定是否显示"亿"(数组Yi的下标) 
  34. int isYi=0; 
  35. string Yuan="";  //输出字符串 
  36. bool flag=false; 
  37. //如果moneyNumber[0]不等于零则说明moneyNumber是一个大于一的数 要考虑
  38. //整数部分和小数部分
  39. //否则说明它小于一 那就仅考虑小数部分就可以了
  40. if(moneyNumber[0]!='0')
  41. {
  42. // moneyNumber = "0"+ moneyNumber;
  43. // Console.WriteLine(moneyNumber);
  44. //逐字操纵数的整数部分 
  45. for(int i=0;i<length-3;i++) 
  46. perValueIsZero=0; 
  47. //确定当前数字所在的位数(只考虑整数部分) 
  48. curDigit=length-3-i; 
  49. if(curDigit<9) 
  50. isYi=0; 
  51. if(curDigit<5||(curDigit<13&&curDigit>8)) 
  52. flag=false; 
  53. isWan=0; 
  54. if(i>0&&perValue==0) 
  55. perValueIsZero=1; 
  56. if(curDigit<5) 
  57. indexOfDigit=curDigit%5; 
  58. else if(curDigit<9) 
  59. indexOfDigit=(curDigit-4)%5; 
  60. else if(curDigit<=13) 
  61. indexOfDigit=(curDigit-8)%5; 
  62. else  
  63. indexOfDigit=(curDigit-12)%5; 
  64. curValue=Convert.ToInt32(moneyNumber[i].ToString()); 
  65. if((curDigit>=5&&curDigit<9||curDigit>12)&&flag==false) 
  66. flag=curValue==0&&length>11?false:true; 
  67. if(curDigit==5||curDigit==13||curDigit==9) 
  68. if(flag) 
  69. isWan=1; 
  70. if(curValue==0) 
  71. perValueIsZero=0; 
  72. if(curDigit==9) 
  73. isYi=1; 
  74. perValue=curValue; 
  75. if(  curValue!=0||(curValue==0&&(curDigit==5||curDigit==13||curDigit==9))  ) 
  76. Yuan+=Ling[perValueIsZero]+UperMoney[curValue]+Digit[indexOfDigit]+Wan[isWan]+Yi[isYi]; 
  77. Yuan+="元"; 
  78. //考虑数的小数部分 
  79. if(moneyNumber[length-1]=='0'&&moneyNumber[length-2]=='0') 
  80. Yuan+="整"; 
  81. else 
  82. if(moneyNumber[length-4]=='0') 
  83. Yuan+="零"; 
  84. if(moneyNumber[length-1]=='0') 
  85. Yuan+=UperMoney[Convert.ToInt32(moneyNumber[length-2].ToString())]+"角"; 
  86. else if(moneyNumber[length-2]=='0') 
  87. if(moneyNumber[length-4]!='0') 
  88. Yuan+="零"; 
  89. Yuan+=UperMoney[Convert.ToInt32(moneyNumber[length-1].ToString())]+"分"; 
  90. else 
  91. Yuan+=UperMoney[Convert.ToInt32(moneyNumber[length-2].ToString())]+"角"+UperMoney[Convert.ToInt32(moneyNumber[length-1].ToString())]+"分"; 
  92. }
  93. else
  94. {
  95. if(moneyNumber[length-4]=='0') 
  96. Yuan+=""; 
  97. if(moneyNumber[length-1]=='0') 
  98. Yuan+=UperMoney[Convert.ToInt32(moneyNumber[length-2].ToString())]+"角"; 
  99. else if(moneyNumber[length-2]=='0') 
  100. if(moneyNumber[length-4]!='0') 
  101. Yuan+=""; 
  102. Yuan+=UperMoney[Convert.ToInt32(moneyNumber[length-1].ToString())]+"分"; 
  103. else 
  104. Yuan+=UperMoney[Convert.ToInt32(moneyNumber[length-2].ToString())]+"角"+UperMoney[Convert.ToInt32(moneyNumber[length-1].ToString())]+"分"; 
  105. }
  106. Console.WriteLine(Yuan); 
  107. [STAThread] 
  108. static void Main(string[] args) 
  109. //写入要转换的数字, 表示decimal数据类型 
  110. System.Decimal d=0; 
  111. bool flag=true; 
  112. bool error=false; 
  113.           
  114. do 
  115. if(error) 
  116. System.Console.WriteLine("输入格式不对,请重新输入!"); 
  117. Console.Write("请输入转换数(16位整数,0退出):"); 
  118. try 
  119. d=Convert.ToDecimal(Console.ReadLine()); 
  120. Console.WriteLine(d);
  121. /*
  122. if(d==0) 
  123. break; 
  124. if(d.ToString(".00").Length>19) 
  125. error=true; 
  126. continue; 
  127. */
  128. toUper(d); 
  129. error=false;
  130. break;
  131. catch
  132. error=true; 
  133.              
  134. }while(flag); 
  135. Console.ReadLine();
  136.