2017-11-03 10 views
0

난에서 번호를받는 함수를 구축을 위해 노력하고 그것이 예는 수천, 수백만, 수십억을이기, 무엇 교단 결정 아래는건물 함수는 숫자 등,

무엇 교단 결정 내가 쓴 것은 있지만 시간 만이 작동합니다. 예를 들어 숫자가 천만이면 내 기능은 그것이 수천에 있다고 생각하며 천만 달러에서 6 자리 이상이 분명하기 때문에 이해할 수 없습니다.

내 코드 :

func configureDenominationLabel() { 

let roundedDouble = round(veryLargeNumber) 

let roundedDoubleInTextForm = String(roundedDouble) 

switch roundedDoubleInTextForm.count { 
case 0...3: 
    denominationsLabel.text = "" 
case 4...6: 
    denominationsLabel.text = "Thousand" 
case 7...9: 
    denominationsLabel.text = "Million" 
case 10...12: 
    denominationsLabel.text = "Billion" 
case 13...15: 
    denominationsLabel.text = "Trillion" 
default: 
    denominationsLabel.text = "" 
} 
} 
+1

'textNPV'란 무엇이며 어디에서 왔습니까? 왜'roundedDoubleInTextForm'이 계산되었지만 사용되지 않았습니까? -이게 진짜 코드 야? 디버깅 *하려고 했습니까? –

+0

죄송합니다. 코드를 복사하여 붙여 넣은 후 일부 내용을 변경했지만 변경 후 모든 내용을 조정하지 않았습니다. 나는 그것을 업데이트했고 일관성이있다. –

+0

* 문제를 디버그하십시오. 'roundedDoubleInTextForm'과'roundedDoubleInTextForm.count'의 값을 출력하는 것으로 시작하십시오 ... –

답변

-1

나는 문자열에 count 방법을 사용하여이 작업을 수행하는 가장 좋은 방법이라고 확신 아닙니다. 코드를 더 멋지게 보이게하려면 다음과 같이 시도해보십시오.

extension Double { 

    var thousands: Double { return self * pow(10, 3) } 
    var millions: Double { return self * pow(10, 6) } 
    var billions: Double { return self * pow(10, 9) } 
    var trillions: Double { return self * pow(10, 12) } 
    ... 

} 

... 

if veryLargeNumber < 1.thousands { 
    denominationsLabel.text = "" 
} else if veryLargeNumber < 1000.thousands { 
    denominationsLabel.text = "Thousands" 
} else if veryLargeNumber < 1000.millions { 
    denominationsLabel.text = "Millions" 
} else if veryLargeNumber < 1000.billions { 
    denominationsLabel.text = "Billions" 
} else if veryLargeNumber < 1000.trillions { 
    denominationsLabel.text = "Trillions" 
} else { 
    denominationsLabel.text = "" 
} 
+0

'10^3'은 1000으로 평가되지 않는다는 것을 알고 있습니까? –

+0

네가 맞아, 잊어 버렸어, 내가 생각하기에 비트 현명한 XOR이야. 당신은'pow (10, 3)'을 사용하거나'**'와 함께 커스텀 연산자를 만들 수 있습니다. –