태그: #Xcode #iOS
- This topic has 2개 답변, 2명 참여, and was last updated 7 months, 3 weeks 전에 by c00012.
-
글쓴이글
-
-
c00012참가자
- 글작성 : 17
- 답글작성 : 5
3개의 텍스트 필드에서 숫자를 입력받아 결과를 계산하는 코드를 다음과 같이 만들었습니다.
@IBAction func Estimate(_ sender: UIButton) {
var payAmt:Double = 0.0 //월 지급액
LoanAmt = Double(txtAmt.text!)!
LoanRate = Double(txtRate.text!)!
LoanDuration = Int(txtDuration.text!)!
let ratemonthly = LoanRate/12.0/100
let Durationinmonth = LoanDuration * 12
let numerator = LoanAmt * ratemonthly * pow(1 + ratemonthly, Double(Durationinmonth))
let denominator = pow(1 + ratemonthly, Double(Durationinmonth)) – 1
payAmt = numerator / denominator
numformatter.numberStyle = .decimal
txtResult.text = “대출금을 갚으려면 월 (numformatter.string(for: Int(payAmt))!)원만큼을 (Durationinmonth)개월동안 내야합니다.”
}
위 코드 외에 텍스트필드에서 숫자를 입력받는 대로 천자리에 콤마를 찍는 코드 또한 아래와 같이 만들었습니다.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// replacementString : 방금 입력된 문자 하나, 붙여넣기 시에는 붙여넣어진 문자열 전체
// return -> 텍스트가 바뀌어야 한다면 true, 아니라면 false
// 이 메소드 내에서 textField.text는 현재 입력된 string이 붙기 전의 string
let formatter = NumberFormatter()
formatter.numberStyle = .decimal // 1,000,000
formatter.locale = Locale.current
formatter.maximumFractionDigits = 0 // 허용하는 소숫점 자리수
// formatter.groupingSeparator // .decimal -> ,
if let removeAllSeprator = textField.text?.replacingOccurrences(of: formatter.groupingSeparator, with: “”){
var beforeForemattedString = removeAllSeprator + string
if formatter.number(from: string) != nil {
if let formattedNumber = formatter.number(from: beforeForemattedString), let formattedString = formatter.string(from: formattedNumber){
textField.text = formattedString
return false
}
}else{ // 숫자가 아닐 때먽
if string == “” { // 백스페이스일때
let lastIndex = beforeForemattedString.index(beforeForemattedString.endIndex, offsetBy: -1)
beforeForemattedString = String(beforeForemattedString[..<lastIndex])
if let formattedNumber = formatter.number(from: beforeForemattedString), let formattedString = formatter.string(from: formattedNumber){
textField.text = formattedString
return false
}
}else{ // 문자일 때
return false
}
}
}
return true
}
코드를 실행해보니 입력은 내가 의도했던 대로 되는데
LoanAmt = Double(txtAmt.text!)!
이 부분에서 값을 받지 못하고 에러를 뱉어내네요. 원인은 아무래도 세자리 콤마찍는 함수인 거 같은데 왜 그러는지를 모르겠어서 이걸 어떤식으로 해결해야 할지 조언 좀 부탁드립니다…
- 이 게시글은 c00012에 의해 7 months, 3 weeks 전에 수정됐습니다.
2024-05-02 오후 8:20 #62258 -
-
-
글쓴이글
- 답변은 로그인 후 가능합니다.