До того, как я обновил xCode 6, у меня не было проблем с приведением двойника к строке, но теперь это дает мне ошибку
var a: Double = 1.5
var b: String = String(a)
Это дает мне сообщение об ошибке «double не преобразовывается в строку». Есть ли другой способ сделать это?
var b = "\(a)"
Ответы:
Это не приведение, это создание строки из значения с форматом.
В другом формате:
Вы также можете опустить
format
свойство, если форматирование не требуется.источник
format:"%.1f" = 1 digit // 1.5
;format:"%.5f" = 5 digits // 1.50000
String(yourDouble)
.обновить Xcode 7.1 • Swift 2.1:
Теперь Double также можно преобразовать в String, поэтому вы можете просто использовать его по своему усмотрению:
Swift 3 или новее мы можем расширить
LosslessStringConvertible
и сделать его универсальнымXcode 11.3 • Swift 5.1 или новее
Для фиксированного количества цифр дроби мы можем расширить
FloatingPoint
протокол:Если вам нужен больший контроль над форматом чисел (минимальные и максимальные цифры дробной части и режим округления), вы можете использовать NumberFormatter:
источник
String(format: "%.\(digits)f", self as! CVarArg)
наString(format: "%.*f", digits, self as! CVarArg)
В дополнение к ответу @Zaph вы можете создать
extension:
Использование:
источник
a.toString()
увидит другой разработчик, определенно будет момент WTF.myToString()
убедиться, что его собственное определение. Но, как и в случае с другими языками, создание прототипов позволяет избежать дублирования кода и обеспечить хорошее обслуживание.println("output: \(a.toString())")
иprintln("output: \(a)")
. Второй вариант не вызывает ошибок компиляции. Это плохая практика?yourDouble?.toString() ?? ""
Swift 3+: попробуйте эту строку кода
источник
чтобы сделать что-либо строкой в swift, кроме, возможно, значений enum, просто делайте то, что вы делаете в методе println ()
например:
источник
Swift 4 : используйте следующий код
источник
Эта функция позволит вам указать количество отображаемых десятичных знаков:
Использование:
источник
String(format:"%."+numberOfDecimalPlaces.description+"f", number)
наString(format:"%.*f", numberOfDecimalPlaces, number)
Здесь есть много ответов, предлагающих самые разные методы. Но при представлении чисел в пользовательском интерфейсе вы всегда хотите использовать,
NumberFormatter
чтобы результаты были правильно отформатированы, округлены и локализованы:Если вам нужно фиксированное количество десятичных знаков, например, для денежных значений
Но прелесть этого подхода в том, что он будет правильно локализован, в результате чего в
10,000.50
США будет10.000,50
Германия. В разных регионах используются разные предпочтительные форматы чисел, и мы должны позволитьNumberFormatter
использовать формат, предпочитаемый конечным пользователем, при представлении числовых значений в пользовательском интерфейсе.Излишне говорить, что, хотя
NumberFormatter
это важно при подготовке строковых представлений в пользовательском интерфейсе, его не следует использовать при записи числовых значений в виде строк для постоянного хранения, интерфейса с веб-службами и т. Д.источник
В быстром 3:
источник
В Swift 3 это просто, как показано ниже
источник
"Optional(6.1696108999999995)"
для меня.У меня это работает. Вы можете попробовать
источник
В Swift 4, если вы хотите изменить и использовать Double в пользовательском интерфейсе в качестве textLabel «String», вы можете добавить это в конец файла:
}
И используйте это так, если хотите, чтобы это было в текстовой метке:
Или распечатайте его как Int:
источник
Я бы предпочел подход NSNumber и NumberFormatter (где необходимо), также вы можете использовать расширение, чтобы избежать раздувания кода
U может также потребоваться обратный подход
источник
LossLessStringConvertible
протоколом расширения вместо расширения Doubleextension LosslessStringConvertible { var string: String { return .init(self) } }
Swift 5 : используйте следующий код
источник
String(format: "%.\(points)f", self)
наString(format: "%.*f", points, self)