์์ง ๋ฏธ์์ฑ์ธ ํ๋ก์ ํธ ์ ๋๋ค.
iPhone์ ๋ด์ฅ๋์ด ์๋ ๊ณ์ฐ๊ธฐ์ ๊ธฐ๋ฅ ๋ฐ ๋์์ธ์ ๋์ผํ๊ฒ ๋ง๋ iOS ์ฑ ์
๋๋ค.
๊ธฐ๋ณธ์ ์ธ ์ฐ์ฐ (+, โ, ร, รท) ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ถ๋ ฅ๊ฐ์
Int
type ์ผ๋ก ๋ณํํด๋ ์๊ด ์๋ ๊ฒฝ์ฐ,Int
type ์ผ๋ก ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋Double
type ์ผ๋ก ์ถ๋ ฅํฉ๋๋ค.
- +, โ ์ฐ์ฐ์ ์ ์ฒด ์์
result
๊ฐ์ ํ๋ฉด์ ์ถ๋ ฅ
- ร, รท ์ฐ์ฐ์ ํด๋น ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ์ธ
temp
๋ง ์ถ๋ ฅ
๋ฌธ์ ์ธ์
-
์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ์์๊ณผ๋ ๋ค๋ฅด๊ฒ Int type ์ผ๋ก ๋ณํ์ด ์๋๊ณ
0.2000...
๊ณผ ๊ฐ์ด ๋๋ฌด ๊ธธ๊ฒ ์ถ๋ ฅ -
Double type ์ ์ ๋ ฅ ๋ฐ์ ํ ๊ณฑํ๊ธฐ, ๋๋๊ธฐ ์ฐ์ฐ์ ํ๋ฉด, ๊ฒฐ๊ณผ๊ฐ์ด ๋ค๋ฅด๊ฒ ๋์ค๋ ์ํฉ ๋ฐ์
-
Swift ์์ฒด์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ํ๋ฆผ
print(3.3 * 3) // 9.89999999... ์ถ๋ ฅ
Solution
-
round()
๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ์๋ N๋ฒ์งธ ์ซ์์์ ๋ฐ์ฌ๋ฆผ ํ๋๋ก ์ฝ๋ ์์ฑprint(round(3.3 * 3 * 1000) / 1000) // 9.9 ์ถ๋ ฅ
-
ํด๋น function ์์
func intOrDouble(_ value: Double) -> String { let roundedValue = round(value * 1000000000) / 1000000000 if roundedValue - Double(Int(roundedValue)) == 0 { return String(Int(roundedValue)) } else { return String(roundedValue) } }
2. ๊ณฑ์ /๋๋์ ์์ ๋ง์ /๋บ์ ์ฐ์ฐ์ ํ๋ ๊ฒฝ์ฐ์ ๋ํด ํ๋ฉด์์ 0์ด ์ถ๋ ฅ๋๋ ์ค๋ฅ ๋ฐ์
๋ฌธ์ ์ํฉ
- ์ฑ์ ์์ํ๊ณ ์ฒซ ์ฐ์ฐ์ด ๊ณฑ์ ์ธ ๊ฒฝ์ฐ์ ๋ํด ์ดํ ๋ง์ ์ ํ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๊ฐ 0์ผ๋ก ์ถ๋ ฅ๋๋ ์ค๋ฅ ๋ฐ์
- ์๋ฅผ ๋ค์ด๋ณด์.
10 * 10 * 10 + 10 ์ ๊ณ์ฐํ๋ฉด + ๋ฒํผ์ ๋๋ฆ๊ณผ ๋์์ ํ๋ฉด์ 0 ์ด ์ถ๋ ฅ๋จ
๋ฌธ์ ์ธ์
+
๋๋-
๋ฒํผ์ ๋๋ฆ๊ณผ ๋์์ ์ด์ํ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ฏ๋ก ํด๋น@IBAction func
์ ๋ฌธ์ ๊ฐ ์์์ ์ธ์- ์ฒซ ์ฐ์ฐ์ด ๊ณฑ์ /๋๋์ ์ธ ๊ฒฝ์ฐ์๋ง ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ด์ ์ฐ์ฐ์ด ์๋ ๊ฒฝ์ฐ์ ๋ํด ๋ฌธ์ ๊ฐ ์์์ ์ธ์
์๋ ์ฝ๋๋ ๊ธฐ์กด @IBAction func sumButton
์ ์ผ๋ถ์ด๋ค.
...
// ๊ณผ๊ฑฐ ์ํ๊ฐ ๊ณฑํ๊ธฐ๋ ๋๋๊ธฐ๋ฉด, result์ temp ๊ฐ์ ๋ํ๊ฑฐ๋ ๋บ
// ๊ณผ๊ฑฐ ์ํ๊ฐ ๋ํ๊ธฐ๋ ๋นผ๊ธฐ๋ฉด, result์ inputNum ๊ฐ์ ์ฐ์ฐ
if pastState == "multi" || pastState == "div" {
if beforeMultiState == "" {
result = calculateTwoNumbers(state: pastState, num1: result, num2: inputNum) // error
} else {
result = calculateTwoNumbers(state: beforeMultiState, num1: result, num2: temp)
}
} else { // sum or sub
result = calculateTwoNumbers(state: pastState, num1: result, num2: inputNum)
}
...
temp
๋? ์ฐ์ฐ์ ์์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก=
์ ๋๋ฅด๊ธฐ ์ ๊น์ง ํ๋ฉด์ ๋ณด์ด๋ ๊ฐ์ ์๋ฏธresult
๋? ํ์ฌ์ ์ต์ข ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ํ์ฌ ์ํ๊ฐsum
์ด๋sub
์ผ ๋๋ง ๊ณ์ฐํ์ฌ ๊ฐ์ ๋ฐ๊ฟbeforeMultiState
๋? ๊ณฑ์ /๋๋์ ์ ์ํ๊ฐ ๋ง์ ์ด์๋์ง ๋บ์ ์ด์๋์ง ์๊ธฐ ์ํด ๋ง๋ ๋ณ์๋ก ์ด๊ธฐ๊ฐ์""
์ด๋ฉฐ,result
๊ฐ์ ๊ตฌํ๊ธฐ ์ํด ์ฌ์ฉ๋จ
๋ฌธ์ ๊ฐ ๋๋ ๋ถ๋ถ: result(=0)
์ inputNum
์ pastState(๊ณฑ์
/๋๋์
)
์ผ๋ก ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ 0 ์ด ๋์ฌ ์๋ฐ์ ์์
Solution
- ํด๋น function ์์
...
if pastState == "multi" || pastState == "div" {
if beforeMultiState == "" {
result = temp // temp = calculateTwoNumbers(state: pastState, num1: temp, num2: inputNum)
} else {
result = calculateTwoNumbers(state: beforeMultiState, num1: result, num2: temp)
}
} else { // sum or sub
result = calculateTwoNumbers(state: pastState, num1: result, num2: inputNum)
}
...
- Xcode 12.3
- Swift 5