Свифт, как отформатировать большое число с разделителями тысяч?

Есть ли простая команда для форматирования 1.60543e + 06 до 1,605,436?

resultFV.text = String.localizedStringWithFormat( "% f", fv)

не получает его.

Ответ 1

Swift Xcode 6.3, SOLVED (я решил оставить $в коде). Если вы не хотите на выходе $, измените значение .CurrencyStyle на .DecimalStyle

var fv = 3534234.55 
var formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.maximumFractionDigits = 0;
resultFV.text = formatter.stringFromNumber(fv) // result: $3,534,235 –

Ответ 2

В Swift 3,

NumberFormatter.localizedString(from: NSNumber(value: whatever), number: NumberFormatter.Style.decimal)

Ответ 3

Вы должны использовать NumberFormatter для этого:

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal

resultFV.text = numberFormatter.string(from: fv)

Ответ 4

Обновление строки валюты Swift 4.1:

let balance = 1234567

let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.maximumFractionDigits = 0

let result = formatter.string(from: NSNumber(value: balance)) 
// result: $1,234,567

Вы можете изменить formatter.numberStyle к .decimal, чтобы оставить его как число без знака "$".

Ответ 5

Вы можете достичь этого, используя инициализаторы String в Swift 3+:

// 1605436
let value: Int = 1605436

// "1,605,436" where Locale == en_US
let formattedInt = String(format: "%d", locale: Locale.current, value) 

// "1,605,436" where Locale == en_US
let formattedDouble = String(format: "%.0f", locale: Locale.current, Double(value))

Ответ 6

Почему вы не ограничиваете точность, например ".0f"

resultFV.text = String.localizedStringWithFormat("%.0f", fv)

Обновленный ответ:

var formatter: NSNumberFormatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle;
var formattedStr: NSString = formatter.stringFromNumber(NSNumber(double: fv))!
resultFV.text = formattedStr

Ответ 7

Обновление для Swift 4

var unformattedValue : Double = 3534234.55
var formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.maximumFractionDigits = 2; //change as desired
formatter.locale = Locale.current // or = Locale(identifier: "de_DE"), more locale identifier codes: https://gist.github.com/jacobbubu/1836273
var displayValue : String = formatter.string(from: NSNumber(value: unformattedValue))! // displayValue: "$3,534,235" '''