LUtilitys.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. /*******************************************************************
  2. * Copyright(c) 2019 DefaultCompany
  3. * All rights reserved.
  4. *
  5. * 文件名称: NewBehaviourScript.cs
  6. * 简要描述:
  7. *
  8. * 创建日期: 2019/08/09 14:07:07
  9. * 作者: SilenceT
  10. * 说明:
  11. ******************************************************************/
  12. using System.Collections;
  13. using System.Collections.Generic;
  14. using UnityEngine;
  15. using UnityEngine.UIElements;
  16. public class LUtilitys : MonoBehaviour
  17. {
  18. /// <summary>
  19. /// 解析Vector3
  20. /// </summary>
  21. /// <param name="val"></param>
  22. /// <param name="separator">分隔符</param>
  23. /// <returns></returns>
  24. public static Vector3 ParseVector3(string val, char separator = '/')
  25. {
  26. if (val.Contains("(")) val.Replace("(", "");
  27. if (val.Contains(")")) val.Replace(")", "");
  28. if (string.IsNullOrEmpty(val) || val == "0")
  29. return Vector3.zero;
  30. val = val.Replace("(", string.Empty).Replace(")", string.Empty);
  31. string[] xyz = val.Split(separator);
  32. if (xyz.Length < 3) return Vector3.zero;
  33. float x = (float)System.Convert.ChangeType(xyz[0], typeof(float));
  34. float y = (float)System.Convert.ChangeType(xyz[1], typeof(float));
  35. float z = (float)System.Convert.ChangeType(xyz[2], typeof(float));
  36. return new Vector3(x, y, z);
  37. }
  38. /// <summary>
  39. /// Vector3转成字符串
  40. /// </summary>
  41. /// <param name="val"></param>
  42. /// <param name="separator">分隔符</param>
  43. /// <returns></returns>
  44. public static string ParseString(Vector3 vector3)
  45. {
  46. return vector3.x.ToString() + "/" + vector3.y.ToString() + "/" + vector3.z.ToString();
  47. }
  48. /// <summary>
  49. /// 将数字转换为中文数字
  50. /// </summary>
  51. /// <param name="number">阿拉伯数字</param>
  52. /// <returns>转换完成后的中文数字(目前只支持到20)</returns>
  53. public static string DigitalToChinese(int arabicNumerals)
  54. {
  55. string tmpStr = string.Empty;
  56. if (arabicNumerals <= 10 && arabicNumerals >= 0)
  57. {
  58. tmpStr = NumberChineseMatch(arabicNumerals);
  59. }
  60. else if (arabicNumerals < 100 && arabicNumerals > 10)
  61. {
  62. char[] tmpArray = arabicNumerals.ToString().ToCharArray();
  63. tmpStr = int.Parse(tmpArray[0].ToString()) == 1
  64. ? "十" + NumberChineseMatch(int.Parse(tmpArray[1].ToString()))
  65. : NumberChineseMatch(int.Parse(tmpArray[0].ToString())) + "十" + (int.Parse(tmpArray[1].ToString()) == 0
  66. ? ""
  67. : NumberChineseMatch(int.Parse(tmpArray[1].ToString())));
  68. }
  69. return tmpStr;
  70. }
  71. /// <summary>
  72. /// 阿拉伯数字和向中文转换匹配
  73. /// </summary>
  74. /// <param name="number"></param>
  75. /// <returns></returns>
  76. private static string NumberChineseMatch(int number)
  77. {
  78. string tmpStr = string.Empty;
  79. switch (number)
  80. {
  81. case 0:
  82. tmpStr = "零";
  83. break;
  84. case 1:
  85. tmpStr = "一";
  86. break;
  87. case 2:
  88. tmpStr = "二";
  89. break;
  90. case 3:
  91. tmpStr = "三";
  92. break;
  93. case 4:
  94. tmpStr = "四";
  95. break;
  96. case 5:
  97. tmpStr = "五";
  98. break;
  99. case 6:
  100. tmpStr = "六";
  101. break;
  102. case 7:
  103. tmpStr = "七";
  104. break;
  105. case 8:
  106. tmpStr = "八";
  107. break;
  108. case 9:
  109. tmpStr = "九";
  110. break;
  111. case 10:
  112. tmpStr = "十";
  113. break;
  114. default:
  115. break;
  116. }
  117. return tmpStr;
  118. }
  119. //数字1-9转换为中文数字
  120. public string OneBitNumberToChinese(string num)
  121. {
  122. string numStr = "123456789";
  123. string chineseStr = "一二三四五六七八九";
  124. string result = "";
  125. int numIndex = numStr.IndexOf(num);
  126. if (numIndex > -1)
  127. {
  128. result = chineseStr.Substring(numIndex, 1);
  129. }
  130. return result;
  131. }
  132. //数字1-9转换为中文数字
  133. public string OneBitNumberToChinese(int num)
  134. {
  135. return OneBitNumberToChinese(num.ToString());
  136. }
  137. //阿拉伯数字转换为中文数字(1-99999)递归实现
  138. public string NumberToChineseByRecursion(int num)
  139. {
  140. string strNum = num.ToString();
  141. string result = "";
  142. if (strNum.Length == 1)
  143. {//个
  144. result += OneBitNumberToChinese(num);
  145. return result;
  146. }
  147. else if (strNum.Length == 2)
  148. {// 十
  149. if (strNum.Substring(0, 1) == "1") result += "十";
  150. else result += (OneBitNumberToChinese(num / 10) + "十");
  151. result += NumberToChinese(num % 10);
  152. }
  153. else if (strNum.Length == 3)
  154. {// 百
  155. result += (OneBitNumberToChinese(num / 100) + "百");
  156. if ((num % 100).ToString().Length < 2 && num % 100 != 0) result += "零";
  157. result += NumberToChinese(num % 100);
  158. }
  159. else if (strNum.Length == 4)
  160. {// 千
  161. result += (OneBitNumberToChinese(num / 1000) + "千");
  162. if ((num % 1000).ToString().Length < 3 && num % 1000 != 0) result += "零";
  163. result += NumberToChinese(num % 1000);
  164. }
  165. else if (strNum.Length == 5)
  166. {// 万
  167. result += (OneBitNumberToChinese(num / 10000) + "万");
  168. if ((num % 10000).ToString().Length < 4 && num % 10000 != 0) result += "零";
  169. result += NumberToChinese(num % 10000);
  170. }
  171. return result;
  172. }
  173. //阿拉伯数字转换为中文数字(0-99999)
  174. public string NumberToChinese(int num)
  175. {
  176. string strNum = num.ToString();
  177. string result = "";
  178. if (strNum.Length == 5)
  179. {//万
  180. result += OneBitNumberToChinese(strNum.Substring(0, 1)) + "万";
  181. strNum = strNum.Substring(1);
  182. }
  183. if (strNum.Length == 4)
  184. {//千
  185. string secondBitNumber = strNum.Substring(0, 1);
  186. if (secondBitNumber == "0") result += "零";
  187. else result += OneBitNumberToChinese(secondBitNumber) + "千";
  188. strNum = strNum.Substring(1);
  189. }
  190. if (strNum.Length == 3)
  191. {//百
  192. string hundredBitNumber = strNum.Substring(0, 1);
  193. if (hundredBitNumber == "0" && result.Substring(result.Length - 1) != "零") result += "零";
  194. else result += OneBitNumberToChinese(hundredBitNumber) + "百";
  195. strNum = strNum.Substring(1);
  196. }
  197. if (strNum.Length == 2)
  198. {//十
  199. string hundredBitNumber = strNum.Substring(0, 1);
  200. if (hundredBitNumber == "0" && result.Substring(result.Length - 1) != "零") result += "零";
  201. else if (hundredBitNumber == "1" && string.IsNullOrEmpty(result)) result += "十";//10->十
  202. else result += OneBitNumberToChinese(hundredBitNumber) + "十";
  203. strNum = strNum.Substring(1);
  204. }
  205. if (strNum.Length == 1)
  206. {//个
  207. if (strNum == "0") result += "零";
  208. else result += OneBitNumberToChinese(strNum);
  209. }
  210. //100->一百零零
  211. if (!string.IsNullOrEmpty(result) && result != "零") result = result.TrimEnd('零');
  212. return result;
  213. }
  214. }