ํด๋ฆฌ์ปค ๋‹จ์œ„ ๊ณต์‹์„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•ด์„œ ๋Œ์•„์™”์Šต๋‹ˆ๋‹ค.



(์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์„œ ๊ธ€์ด ์•ˆ์ ํ˜€์„œ ๋ถ„ํ• ํ•จ.)

[System.Serializable] public struct Unit { public Unit(int _num, int _unit) { num = _num; unit = _unit; } //6์ž๋ฆฌ ์ˆ˜, ์ž๋ฆฌ์ˆ˜ public int num, unit; public static Unit zero = new(0, 0); public static Unit operator +(Unit u1, Unit u2) { Unit result = u1; if (Mathf.Abs(u1.unit - u2.unit) > 5) //6์ž๋ฆฌ ์ฐจ์ด๋ถ€ํ„ด ์—ฐ์‚ฐ์˜ ์˜๋ฏธ๊ฐ€ ์—†์Œ. ๋” ํฐ ์ˆซ์ž๋กœ ์ ์šฉ. { if (u1.unit < u2.unit) { result = u2; } else { result = u1; } } else { float temp = (Mathf.Pow(10, u1.unit - u2.unit) * u1.num + u2.num) * Mathf.Pow(10, u2.unit - u1.unit); //u1์— 10์˜ u1์™€ u2์ž๋ฆฌ์ˆ˜ ์ฐจ์ด ๋งŒํผ ์ œ๊ณฑํ•ด์ฃผ๊ณ  u2 ๊ฐ’๊ณผ ๋”ํ•œ ๋’ค, u2๊ณผ u1 ์ž๋ฆฌ์ˆ˜ ์ฐจ์ด๋งŒํผ ๋‹ค์‹œ ์ œ๊ณฑํ•ด์„œ ๊ฐ’ ์žฌ๋ณด์ • result = SetUnit(result, temp); } return result; } public static Unit operator -(Unit u1, Unit u2) { if (Mathf.Abs(u1.unit - u2.unit) > 5) { if (u1.unit < u2.unit) { u1 = u2; } return u1; } else { float temp = (Mathf.Pow(10, u1.unit - u2.unit) * u1.num - u2.num) * Mathf.Pow(10, u2.unit - u1.unit); Unit result = u1; result = SetUnit(result, temp); return result; } } public static Unit operator *(Unit u1, Unit u2) { float temp = u1.num * u2.num * 0.00001f; u1.unit = u1.unit + u2.unit - 1; Unit result = u1; result = SetUnit(result, temp); return result; } public static Unit operator /(Unit u1, Unit u2) { float temp = u1.num / u2.num * 100000f; u1.unit = u1.unit - u2.unit + 1; Unit result = u1; result = SetUnit(result, temp); return result; } public static Unit operator *(Unit u1, int u2) { float temp = u1.num * u2; Unit result = u1; result = SetUnit(result, temp); return result; } public static Unit operator /(Unit u1, int u2) { float temp = u1.num / u2; Unit result = u1; result = SetUnit(result, temp); return result; } static Unit SetUnit(Unit u1, float temp) { Unit result = u1; while (true) //์ˆซ์ž ์ž๋ฆฌ 6์ž๋ฆฌ๋กœ ๋ณด์ •. { if (temp == 0) { result = zero; break; } else if (Mathf.Abs(temp) >= 1000000) { temp *= 0.1f; result.unit++; } else if (Mathf.Abs(temp) < 100000) { temp *= 10f; result.unit--; } else { result.num = (int)temp; break; } } return result; } public static bool operator <(Unit u1, Unit u2) { if (u1.unit < u2.unit) { return true; } else if (u1.unit > u2.unit) { return false; } else if (u1.num < u2.num) { return true; } else { return false; } } public static bool operator >(Unit u1, Unit u2) { if (u1.unit > u2.unit) { return true; } else if (u1.unit < u2.unit) { return false; } else if (u1.num > u2.num) { return true; } else { return false; } } public static bool operator <=(Unit u1, Unit u2) { if (u1.unit < u2.unit) { return true; } else if (u1.unit > u2.unit) { return false; } else if (u2.num < u1.num) { return false; } else { return true; } } public static bool operator >=(Unit u1, Unit u2) { if (u1.unit > u2.unit) { return true; } else if (u1.unit < u2.unit) { return false; } else if (u2.num > u1.num) { return false; } else { return true; } } static readonly char[] numChar = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; public static string StringNum(Unit money) //์ˆซ์ž ์„ธ๊ฐœ๋กœ ์ž๋ฅด๊ณ , ์ž๋ฆฟ์ˆ˜ ๊ณ„์‚ฐํ•ด์„œ ์†Œ์ˆซ์ ๊ณผ ๋‹จ์œ„๋ฅผ ๋”ํ•ด์คŒ. { string result; if (money.num == 0) { result = "0.00"; } else if (money.num > 0) { result = money.num.ToString().Substring(0, 3); //3๊ธ€์ž ์ž๋ฅด๊ธฐ if (money.unit % 3 != 0) { result = result.Insert(money.unit % 3, "."); } } else { result = money.num.ToString().Substring(0, 4); //์Œ์ˆ˜๋Š” 4๊ธ€์ž๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ 4๊ธ€์ž ์ž๋ฅด๊ณ  insert์— +1 if (money.unit % 3 != 0) { result = result.Insert((money.unit % 3) + 1, "."); } } if (money.unit > 3) { int parse = (money.unit - 1) / 3; string units = ""; while (true) { units += numChar[(parse - 1) % 26]; parse = (parse - 1) / 26; if(parse == 0) { break; } } char[] arr = units.ToCharArray(); System.Array.Reverse(arr); result += new string(arr); } return result; } }