public static Unit operator +(Unit u1, Unit u2)
{
Unit result = u1;
if (Mathf.Abs(u1.unit - u2.unit) > 5)
{
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);
result = SetUnit(result, temp);
}
return result;
}
SetUnit์ด ๊ณ์ฐ์ ๋ค์ด๊ฐ๋ฉด ์๋ณธ ๊ฐ์ ๋ฐ๊ฟ๋ฒ๋ฆผ.... ๋๋ฒ๊ทธ ์ฐ์ด๋ดค๋๋ฐ ๊ฑฐ์ ํ์คํจ... ์๋ณธ์ ์๊ฐ๊ณ ์๋๋ฐ ์ด๋ป๊ฒ ํผ์ ๋ฐ๊พธ๋๊ฑฐ์??
๊ทธ๋ฅ ์ฐ์ฐ์ด ๋ณต์กํ๋ค๊ฐ ๋์ธ๊ฑฐ ๊ฐ์๋ฐ
์๋๊ฐ SetUnit์
static Unit SetUnit(Unit u1, float temp)
{
Unit result = u1;
while (true) //์ซ์ ์๋ฆฌ 6์๋ฆฌ๋ก ๋ณด์ .
{
InfiniteLoopDetector.Run(); //๋ฌดํ๋ฃจํ ์ฒดํฌ์ฉ์
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;
}
์ง์ง ์ด์ง๋ฌ์... ๋ญ์ ๋์ฒด
SetUnit ์ดํ์ ๊ฐ์ด result๋ก ๋ฐ๋์ด์์
์ฝ๋ ํ์ค๋์์ฝ๊ณ ๊ณ์ฐ์๋ค์ด๊ฐ๋ฉด ์๋ณธ๊ฐ~ ์ด๋ป๊ฒ ํผ์๋ฐ๊ฟ? ์์ static ์ฐ๊ณ ์๊ฒ ์ง ํ๋๋ฐ ใ ใ ์๋ง static๋ฌธ์ ์ผ๊บผ๊ฐ์๋ฐ
unit์ด ๊ฐ๋ณต์ฌํ๋ ๊ตฌ์กฐ์ฒด๊ฐ ์๋๋ผ ์ฐธ์กฐ๋ฐฉ์์ธ ํด๋์ค๋ผ ๊ทธ๋ฐ๊ฑฐ์ผ๋ฏ
result์ ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ๊ณ SetUnit์๋ ๋๊ฐ์ด ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ๊ฑฐ์??
ํด๋์ค๋ new ๋ก ๊ฐ์ ์๋ก ๋ง๋๋๊ฒ ์๋๋ฉด ๋์ ์ํค๋ฉด ๊ฐ์ ์๋ก ๋ง๋๋๊ฒ ์๋๋ผ ์ฐธ์กฐ๋ง ์ ๋ฌํจ
static Unit SetUnit(Unit u1, float temp) { Unit result = u1; ์ฌ๊ธฐ์ u1 ๋ ํผ๋ฐ์ค ๋ฐ๊ณ ์์ผ๋๊น, u1 = result๊ฐ ๋๋ฒ๋ฆฌ๋๊ฑฐ์
result๋ u1์ด๋ ๋๊ฐ์ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋๊น result ๋ฐ๊พธ๋ฉด u1 ๋ฐ๋๋๊ฒ ๋น์ฐํ๊ฑฐ. ๊ทธ๊ฒ ์ซ์ผ๋ฉด u1์ ๋ณต์ฌํด์ ๋๊ธฐ๋์ง ํด๋ผ
์ด๋ฐ๋ฌธ์ ๋ ์์ธ์ฐพ๊ธฐ์ฌ์. ์ง์ ์์ ์ ์ค๋จ์ ์ฐ์ด๋๊ณ ํ์ค์ฉ ๋๊ธฐ๋ฉด์ ์๋ณธ๋ณ์๊ฐ ๋ณํ๋์์ ์ ์ก์ผ๋ฉด๋.
์ฝ๋๋ณด๋๊น ์ฐธ์กฐ ๋ฌธ์ ์ธ๋ฏ
ํด๋์ค๋ ์๋ ๋ค ์ฝ ๋ฐ์ด ๋ ํผ๋ฐ์ค๋ก ๋์ด๊ฐ๋ ๋ฐ์์