Как использовать println в Swift для форматирования числа

При выходе из системы с плавающей запятой в Objective-C вы можете сделать следующее, чтобы ограничить вывод только двумя знаками после запятой:

float avgTemp = 66.844322156
NSLog (@"average temp. = %.2f", avgTemp);

Но как это сделать в Swift? И как вы экранируете другие символы в println в Swift?

Вот обычный оператор Swift println:

println ("Avg. temp = \(avgTemp)")

Итак, как вы ограничиваете десятичные разряды?

Кроме того, как избежать двойных кавычек в println?


person sirab333    schedule 08.06.2014    source источник
comment
возможный дубликат описатель формата Precision String In Swift   -  person Connor    schedule 08.06.2014
comment
возможный дубликат форматирования строки Double   -  person Jukka Suomela    schedule 13.06.2014


Ответы (4)


Вот самое короткое решение, которое я нашел до сих пор:

let avgTemp = 66.844322156
println(NSString(format:"%.2f", avgTemp))

Это похоже на быструю версию stringWithFormat NSString.

person sirab333    schedule 08.06.2014
comment
println удален в 2.0, вместо этого используйте print - person LiangWang; 18.06.2015

Все, что касается формата числа в виде строки, можно настроить с помощью NSNumberFormatter:

let nf = NSNumberFormatter()
nf.numberStyle = NSNumberFormatterStyle.DecimalStyle
nf.maximumFractionDigits = 2
println(nf.stringFromNumber(0.33333)) // prints 0.33

Вы можете экранировать кавычки с помощью обратной косой черты

println("\"God is dead\" -Nietzsche")
person Dash    schedule 08.06.2014
comment
кажется, что много работы по сравнению с использованием %.2f в Objective-C - person wigging; 08.06.2014
comment
Да я согласен. Определенно есть способы сделать его более эффективным, например, с помощью расширения, но это все еще беспорядок. - person Dash; 08.06.2014
comment
Согласованный. ДОЛЖЕН быть более простой подход к базовой строке формата. - person uchuugaka; 08.06.2014
comment
поскольку Swift все еще находится в бета-версии, возможно, встроенные средства форматирования строк еще не реализованы. - person wigging; 08.06.2014
comment
Нотация \() буквально обращается к свойству description любого значения, которое находится внутри него. Было бы здорово иметь возможность включать другие аргументы форматирования, но сейчас, по крайней мере, все это придется делать вручную. - person Dash; 08.06.2014

Println() устарела.

 var avgTemp = 66.844322156
  print("average temp. = (round(avgTemp*100)/100)")   // average temp. = 66.84

//or

print(NSString(format:"average temp. = %.2f", avgTemp))) // average temp. = 66.84 avgTemp = 66.846322156

print(String(format:"average temp. = %.2f", avgTemp)) // average temp. = 66.85
person Vicky    schedule 14.05.2015
comment
Вы должны поставить косую черту (\) перед (round(avgTemp*100)/100), чтобы он работал. Вот так: ‹code›print(средняя температура = \(округление(avgTemp*100)/100))‹/code› - person Demilitarized Zone; 16.08.2016

Если вам нужно часто печатать числа с плавающей запятой с определенной точностью, вы можете расширить Float и Double с помощью удобных методов. Например, для точности до 2 значащих цифр:

// get Float or Double with 2 significant figure precision
var numberFormatter = NSNumberFormatter()
extension Float {
    var sf2:String {
        get {
            numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
            numberFormatter.maximumSignificantDigits = 2
            return numberFormatter.stringFromNumber(self)!
        }
    }
}
extension Double {
    var sf2:String {
        get {
            numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
            numberFormatter.maximumSignificantDigits = 2
            return numberFormatter.stringFromNumber(self)!
        }
    }
}

Затем, когда вам нужно распечатать вещи:

let x = 5.23325
print("The value of x is \(x.sf2)")
person Daniel Howard    schedule 11.11.2015