ํด๋ฆฌ์ปค ๋จ์ ๊ณต์์ ์ ๊ทธ๋ ์ด๋ ํด์ ๋์์์ต๋๋ค.
(์ฝ๋๊ฐ ๊ธธ์ด์ ๊ธ์ด ์์ ํ์ ๋ถํ ํจ.)
[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; } }
์์ ์ ๋ํฐ ์ด๋ณด๋ ์ฌ์ฉํ๊ณ ์ถ์ด๋ ์ฌ์ฉ๋ฒ์ ๋ชฐ๋ผ์ ์ถ์ฒ ๋๋ฆฌ๊ณ ๊ฐ๋๋ค