FastReportScript.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Threading.Tasks;
  8. namespace PTMedicalInsurance.Common
  9. {
  10. public class FastReportFunction
  11. {
  12. /// <summary>
  13. /// 金额转换成中文大写金额
  14. /// </summary>
  15. /// <param name="LowerMoney">eg:10.74</param>
  16. /// <returns></returns>
  17. public static string MoneyToUpper(string LowerMoney)
  18. {
  19. string functionReturnValue = null;
  20. bool IsNegative = false; // 是否是负数
  21. if (LowerMoney.Trim().Substring(0, 1) == "-")
  22. {
  23. // 是负数则先转为正数
  24. LowerMoney = LowerMoney.Trim().Remove(0, 1);
  25. IsNegative = true;
  26. }
  27. string strLower = null;
  28. string strUpart = null;
  29. string strUpper = null;
  30. int iTemp = 0;
  31. // 保留两位小数 123.489→123.49  123.4→123.4
  32. LowerMoney = Math.Round(double.Parse(LowerMoney), 2).ToString();
  33. if (LowerMoney.IndexOf(".") > 0)
  34. {
  35. if (LowerMoney.IndexOf(".") == LowerMoney.Length - 2)
  36. {
  37. LowerMoney = LowerMoney + "0";
  38. }
  39. }
  40. else
  41. {
  42. LowerMoney = LowerMoney + ".00";
  43. }
  44. strLower = LowerMoney;
  45. iTemp = 1;
  46. strUpper = "";
  47. while (iTemp <= strLower.Length)
  48. {
  49. switch (strLower.Substring(strLower.Length - iTemp, 1))
  50. {
  51. case ".":
  52. strUpart = "圆";
  53. break;
  54. case "0":
  55. strUpart = "零";
  56. break;
  57. case "1":
  58. strUpart = "壹";
  59. break;
  60. case "2":
  61. strUpart = "贰";
  62. break;
  63. case "3":
  64. strUpart = "叁";
  65. break;
  66. case "4":
  67. strUpart = "肆";
  68. break;
  69. case "5":
  70. strUpart = "伍";
  71. break;
  72. case "6":
  73. strUpart = "陆";
  74. break;
  75. case "7":
  76. strUpart = "柒";
  77. break;
  78. case "8":
  79. strUpart = "捌";
  80. break;
  81. case "9":
  82. strUpart = "玖";
  83. break;
  84. }
  85. switch (iTemp)
  86. {
  87. case 1:
  88. strUpart = strUpart + "分";
  89. break;
  90. case 2:
  91. strUpart = strUpart + "角";
  92. break;
  93. case 3:
  94. strUpart = strUpart + "";
  95. break;
  96. case 4:
  97. strUpart = strUpart + "";
  98. break;
  99. case 5:
  100. strUpart = strUpart + "拾";
  101. break;
  102. case 6:
  103. strUpart = strUpart + "佰";
  104. break;
  105. case 7:
  106. strUpart = strUpart + "仟";
  107. break;
  108. case 8:
  109. strUpart = strUpart + "万";
  110. break;
  111. case 9:
  112. strUpart = strUpart + "拾";
  113. break;
  114. case 10:
  115. strUpart = strUpart + "佰";
  116. break;
  117. case 11:
  118. strUpart = strUpart + "仟";
  119. break;
  120. case 12:
  121. strUpart = strUpart + "亿";
  122. break;
  123. case 13:
  124. strUpart = strUpart + "拾";
  125. break;
  126. case 14:
  127. strUpart = strUpart + "佰";
  128. break;
  129. case 15:
  130. strUpart = strUpart + "仟";
  131. break;
  132. case 16:
  133. strUpart = strUpart + "万";
  134. break;
  135. default:
  136. strUpart = strUpart + "";
  137. break;
  138. }
  139. strUpper = strUpart + strUpper;
  140. iTemp = iTemp + 1;
  141. }
  142. strUpper = strUpper.Replace("零拾", "零");
  143. strUpper = strUpper.Replace("零佰", "零");
  144. strUpper = strUpper.Replace("零仟", "零");
  145. strUpper = strUpper.Replace("零零零", "零");
  146. strUpper = strUpper.Replace("零零", "零");
  147. strUpper = strUpper.Replace("零角零分", "整");
  148. strUpper = strUpper.Replace("零分", "整");
  149. strUpper = strUpper.Replace("零角", "零");
  150. strUpper = strUpper.Replace("零亿零万零圆", "亿圆");
  151. strUpper = strUpper.Replace("亿零万零圆", "亿圆");
  152. strUpper = strUpper.Replace("零亿零万", "亿");
  153. strUpper = strUpper.Replace("零万零圆", "万圆");
  154. strUpper = strUpper.Replace("零亿", "亿");
  155. strUpper = strUpper.Replace("零万", "万");
  156. strUpper = strUpper.Replace("零圆", "圆");
  157. strUpper = strUpper.Replace("零零", "零");
  158. // 对壹圆以下的金额的处理
  159. if (strUpper.Substring(0, 1) == "圆")
  160. {
  161. strUpper = strUpper.Substring(1, strUpper.Length - 1);
  162. }
  163. if (strUpper.Substring(0, 1) == "零")
  164. {
  165. strUpper = strUpper.Substring(1, strUpper.Length - 1);
  166. }
  167. if (strUpper.Substring(0, 1) == "角")
  168. {
  169. strUpper = strUpper.Substring(1, strUpper.Length - 1);
  170. }
  171. if (strUpper.Substring(0, 1) == "分")
  172. {
  173. strUpper = strUpper.Substring(1, strUpper.Length - 1);
  174. }
  175. if (strUpper.Substring(0, 1) == "整")
  176. {
  177. strUpper = "零圆整";
  178. }
  179. functionReturnValue = strUpper;
  180. if (IsNegative == true)
  181. {
  182. return "负" + functionReturnValue;
  183. }
  184. else
  185. {
  186. return functionReturnValue;
  187. }
  188. }
  189. /// <summary>
  190. /// 取两点时间之间的天数、小时、分钟、秒钟
  191. /// </summary>
  192. /// <param name="DateTime1"></param>
  193. /// <param name="DateTime2"></param>
  194. /// <returns></returns>
  195. public static string DateDiff(DateTime DateTime1, DateTime DateTime2)
  196. {
  197. string dateDiff = null;
  198. TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
  199. TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
  200. TimeSpan ts = ts1.Subtract(ts2).Duration();
  201. //dateDiff = ts.Days.ToString() + "天"
  202. // + ts.Hours.ToString() + "小时"
  203. // + ts.Minutes.ToString() + "分钟"
  204. // + ts.Seconds.ToString() + "秒";
  205. if (ts.Days == 0)
  206. dateDiff = "1天";
  207. else
  208. dateDiff = ts.Days.ToString() + "天";
  209. return dateDiff;
  210. }
  211. public static void Register()
  212. {
  213. Type funType = typeof(FastReportFunction);
  214. MethodInfo method = funType.GetMethod("MoneyToUpper");
  215. if(!FastReport.Utils.RegisteredObjects.IsTypeRegistered(funType) && method != null)
  216. {
  217. FastReport.Utils.RegisteredObjects.Add(funType, "Functions,CustomFunctions",0x34);
  218. FastReport.Utils.RegisteredObjects.AddFunction(method, "CustomFunctions");
  219. }
  220. }
  221. }
  222. }