patternswiftModerate
Int extension for translating integer to plain English
Viewed 0 times
translatingenglishextensionforintintegerplain
Problem
This code was inspired by this question: Number to Words
```
import Foundation
extension Int {
func plainEnglish (negativeSign: String = "negative") -> String {
func singleNumberName (number: Int) -> String {
switch (number) {
case 1: return "one"
case 2: return "two"
case 3: return "three"
case 4: return "four"
case 5: return "five"
case 6: return "six"
case 7: return "seven"
case 8: return "eight"
case 9: return "nine"
default:return ""
}
}
func tensNumberName (number: Int) -> String {
switch (number) {
case 2: return "twenty"
case 3: return "thirty"
case 4: return "fourty"
case 5: return "fifty"
case 6: return "sixty"
case 7: return "seventy"
case 8: return "eighty"
case 9: return "ninety"
default:return ""
}
}
func teensNumberName (number: Int) -> String {
switch (number) {
case 0: return "ten"
case 1: return "eleven"
case 2: return "twelve"
case 3: return "thirteen"
case 5: return "fifteen"
default:return singleNumberName(number) + "teen"
}
}
var number = self
var digits: [Int] = []
while number != 0 {
digits.append(abs(number%10))
number /= 10
}
var plainEnglish: [String] = []
var isTeen = false
let totalPlaces = digits.count
var currentPlace = 0
for (index, digit) in enumerate(digits.reverse()) {
currentPlace = totalPlaces - index
if currentPlace % 3 == 0 && digit > 0 {
plainEnglish.append(singleNumberName(digit) + " hundred")
} else if (currentPlace + 1) % 3 == 0 {
if digi
```
import Foundation
extension Int {
func plainEnglish (negativeSign: String = "negative") -> String {
func singleNumberName (number: Int) -> String {
switch (number) {
case 1: return "one"
case 2: return "two"
case 3: return "three"
case 4: return "four"
case 5: return "five"
case 6: return "six"
case 7: return "seven"
case 8: return "eight"
case 9: return "nine"
default:return ""
}
}
func tensNumberName (number: Int) -> String {
switch (number) {
case 2: return "twenty"
case 3: return "thirty"
case 4: return "fourty"
case 5: return "fifty"
case 6: return "sixty"
case 7: return "seventy"
case 8: return "eighty"
case 9: return "ninety"
default:return ""
}
}
func teensNumberName (number: Int) -> String {
switch (number) {
case 0: return "ten"
case 1: return "eleven"
case 2: return "twelve"
case 3: return "thirteen"
case 5: return "fifteen"
default:return singleNumberName(number) + "teen"
}
}
var number = self
var digits: [Int] = []
while number != 0 {
digits.append(abs(number%10))
number /= 10
}
var plainEnglish: [String] = []
var isTeen = false
let totalPlaces = digits.count
var currentPlace = 0
for (index, digit) in enumerate(digits.reverse()) {
currentPlace = totalPlaces - index
if currentPlace % 3 == 0 && digit > 0 {
plainEnglish.append(singleNumberName(digit) + " hundred")
} else if (currentPlace + 1) % 3 == 0 {
if digi
Solution
So Apple already has an implementation for this, using
NSNumberFormatter. A bit easier to implement than what you have now ;).var numberFormatter:NSNumberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.SpellOutStyle
var string = numberFormatter.stringFromNumber(100)Code Snippets
var numberFormatter:NSNumberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.SpellOutStyle
var string = numberFormatter.stringFromNumber(100)Context
StackExchange Code Review Q#58878, answer score: 18
Revisions (0)
No revisions yet.