Ниже показано, как я бы предварительно обрезал число с плавающей запятой до двух десятичных разрядов.
NSLog(@" %.02f %.02f %.02f", r, g, b);
Я проверил документы и электронную книгу, но не смог понять это. Спасибо!
Мое лучшее решение на данный момент, исходя из ответа Дэвида :
import Foundation
extension Int {
func format(f: String) -> String {
return String(format: "%\(f)d", self)
}
}
extension Double {
func format(f: String) -> String {
return String(format: "%\(f)f", self)
}
}
let someInt = 4, someIntFormat = "03"
println("The integer number \(someInt) formatted with \"\(someIntFormat)\" looks like \(someInt.format(someIntFormat))")
// The integer number 4 formatted with "03" looks like 004
let someDouble = 3.14159265359, someDoubleFormat = ".3"
println("The floating point number \(someDouble) formatted with \"\(someDoubleFormat)\" looks like \(someDouble.format(someDoubleFormat))")
// The floating point number 3.14159265359 formatted with ".3" looks like 3.142
Я думаю, что это наиболее Swift-подобное решение, связывающее операции форматирования непосредственно с типом данных. Вполне может быть, что где-то есть встроенная библиотека операций форматирования, или, возможно, она скоро выйдет. Имейте в виду, что язык все еще находится в бета-версии.
простой способ это:
источник
println(String(format: "a float number: %.5f", 1.0321))
printf
без необходимости писать отдельные расширения.import Foundation
Я нашел
String.localizedStringWithFormat
работать довольно хорошо:Пример:
источник
Это очень быстрый и простой способ, который не требует сложного решения.
источник
Col 16: 'init' has been renamed to 'init(describing:)'
Большинство ответов здесь действительны. Однако, если вы будете часто форматировать число, рассмотрите возможность расширения класса Float для добавления метода, который возвращает отформатированную строку. Смотрите пример кода ниже. Это позволяет достичь той же цели с помощью средства форматирования чисел и расширения.
Консоль показывает:
SWIFT 3.1 обновление
источник
NSNumberFormatter
, чтобы больше людей использовали , как этот ответ. Другие ответы с высоким рейтингом просто не отражают настройки локали устройства (например, в некоторых локалях они используют запятую для десятичного разряда; это отражает это; другие ответы нет).NSNumberFormatter
его инициализация довольно медленная. Если возможно, это помогает определить один и использовать его повторно. Тем не менее, я здесь читаю этот вопрос, потому что в моем случае это невозможно.Вы не можете сделать это (пока) с интерполяцией строк. Ваша лучшая ставка по-прежнему будет NSString форматирования:
Экстраполируя из Python, кажется, что разумный синтаксис может быть:
Что затем позволяет использовать их как:
Вы можете определить аналогичные операторы для всех числовых типов, к сожалению, я не нашел способа сделать это с обобщениями.
Swift 5 Обновление
По крайней мере, Swift 5
String
напрямую поддерживаетformat:
инициализатор, поэтому его не нужно использовать,NSString
и@infix
атрибут больше не нужен, что означает, что приведенные выше примеры должны быть записаны как:источник
[NSString stringWithFormat...
Зачем делать это так сложно? Вы можете использовать это вместо:
Посмотрите, как это работает на детской площадке.
PS: Решение от: http://rrike.sh/xcode/rounding-various-decimal-places-swift/
источник
Применение
источник
Более элегантное и универсальное решение - переписать
%
оператор ruby / python :источник
"Hello %@, This is pi : %.2f" % ["World", M_PI]
работает, но странным образом"%@ %@" % ["Hello", "World"]
поднимаетсяcan't unsafeBitCast
... Угадайте, это будет исправлено в следующей версии.,
это не допустимый символьный оператор, в Swift и большинстве языков. И, imo, лучше использовать%
оператор, который уже существует на других языках. См developer.apple.com/library/ios/documentation/Swift/Conceptual/...Swift 4
источник
Вы все еще можете использовать NSLog в Swift, как и в Objective-C, только без знака @.
Редактировать: После работы с Swift некоторое время я хотел бы добавить также этот вариант
Вывод:
источник
подробности
Решение 1
func roundnded () -> Двойной
округленная функция (_ rule: FloatingPointRoundingRule) -> Double
мутирующий раунд ()
мутирующий раунд функции (_ rule: FloatingPointRoundingRule)
Решение 2
Применение
Полный образец
Вывод
источник
источник
Ответы, данные до сих пор и получившие наибольшее количество голосов, основаны на методах NSString и потребуют, чтобы вы импортировали Foundation.
Сделав это, вы по- прежнему имеете доступ к NSLog.
Поэтому я думаю, что ответ на вопрос, если вы спрашиваете, как продолжить использовать NSLog в Swift, просто:
import Foundation
источник
источник
здесь «чистое» быстрое решение
источник
Сила расширения
Выход: скорость 12,3
источник
менее печатный способ:
источник
Вы также можете создать оператор таким образом
источник
Также с округлением:
источник
используйте метод ниже
источник
Версия оператора ruby / python% Винсента Гуерчи, обновленная для Swift 2.1:
источник
Выше много хороших ответов, но иногда шаблон более уместен, чем «% .3f». Вот мой пример использования NumberFormatter в Swift 3.
Здесь я хотел, чтобы всегда отображались 2 десятичных знака, но только третий, если он не равен нулю.
источник
Обновление Swift 4 Xcode 10
источник
Как насчет расширений для типов Double и CGFloat:
Применение:
оттисков: 112 465 848 348 508,46
источник
источник
Я не знаю о двух десятичных разрядах, но вот как вы можете печатать числа с нулем после запятой, поэтому я думаю, что это может быть 2 места, 3 места ... (Примечание: вы должны преобразовать CGFloat в Double, чтобы передать в строку (формат :) или он будет видеть значение ноль)
источник
Пример Swift2: ширина экрана устройства iOS, форматирующего Float, удаляющего десятичную
источник
@ Кристиан Дитрих:
вместо:
это также может быть:
[Исправление:] Извините за путаницу * - Конечно, это работает с дублями. Я думаю, что наиболее практичным (если вы хотите, чтобы цифры были округлены, а не обрезаны), это было бы что-то вроде этого:
Только для Float, просто замените Double на Float, pow на powf и round на roundf.
Обновление: я обнаружил, что наиболее целесообразно использовать тип возврата Double вместо String. Он работает так же для вывода String, то есть:
печатает: Pi примерно 3,142.
Таким образом, вы можете использовать его для Strings (вы можете даже написать: println (d ~> 2)), но дополнительно вы также можете использовать его для прямого округления значений, то есть:
или что вам нужно ...
источник
использование
или
источник