Antes de atualizar o xCode 6, não tive problemas para converter um double para uma string, mas agora me dá um erro
var a: Double = 1.5
var b: String = String(a)
Isso me dá a mensagem de erro "double não é conversível em string". Existe alguma outra maneira de fazer isso?
var b = "\(a)"
Respostas:
Ele não está lançando, está criando uma string a partir de um valor com um formato.
Com um formato diferente:
Você também pode omitir a
format
propriedade se nenhuma formatação for necessária.fonte
format:"%.1f" = 1 digit // 1.5
;format:"%.5f" = 5 digits // 1.50000
String(yourDouble)
.atualizar o Xcode 7.1 • Swift 2.1:
Agora Double também pode ser convertido em String para que você possa simplesmente usá-lo como desejar:
Swift 3 ou posterior , podemos estender
LosslessStringConvertible
e torná-lo genéricoXcode 11.3 • Swift 5.1 ou posterior
Para um número fixo de dígitos fracionários, podemos estender o
FloatingPoint
protocolo:Se precisar de mais controle sobre o formato de número (dígitos de fração mínimo e máximo e modo de arredondamento), você pode usar NumberFormatter:
fonte
String(format: "%.\(digits)f", self as! CVarArg)
porString(format: "%.*f", digits, self as! CVarArg)
Além da resposta @Zaph, você pode criar
extension:
Uso:
fonte
a.toString()
for vista por outro desenvolvedor definitivamente haverá um momento WTF.myToString()
para ter certeza de que sua definição personalizada. Mas, como em outras linguagens, a prototipagem evita a duplicação de código e uma boa manutenção.println("output: \(a.toString())")
eprintln("output: \(a)")
. A segunda opção não causa erros de compilação. Esta opção é uma má prática?yourDouble?.toString() ?? ""
Swift 3+: experimente estas linhas de código
fonte
para transformar qualquer coisa em uma string em swift, exceto talvez valores de enum, simplesmente faça o que você faz no método println ()
por exemplo:
fonte
Swift 4 : use o seguinte código
fonte
Esta função permitirá que você especifique o número de casas decimais a serem mostradas:
Uso:
fonte
String(format:"%."+numberOfDecimalPlaces.description+"f", number)
porString(format:"%.*f", numberOfDecimalPlaces, number)
Existem muitas respostas aqui que sugerem uma variedade de técnicas. Mas ao apresentar números na IU, você invariavelmente deseja usar um
NumberFormatter
para que os resultados sejam formatados, arredondados e localizados corretamente:Se você quiser um número fixo de casas decimais, por exemplo, para valores monetários
Mas a beleza dessa abordagem é que ela será adequadamente localizada, resultando nos
10,000.50
Estados Unidos, mas10.000,50
na Alemanha. Localidades diferentes têm formatos preferenciais diferentes para números e devemos permitir oNumberFormatter
uso do formato preferido pelo usuário final ao apresentar valores numéricos na IU.Desnecessário dizer que, embora
NumberFormatter
seja essencial ao preparar representações de string dentro da IU, não deve ser usado se estiver escrevendo valores numéricos como strings para armazenamento persistente, interface com serviços da web, etc.fonte
Em swift 3:
fonte
No Swift 3 é simples, conforme mostrado abaixo
fonte
"Optional(6.1696108999999995)"
para mim.Isso funciona para mim. Você pode tentar
fonte
No Swift 4, se você quiser modificar e usar um Double na IU como um textLabel "String", você pode adicionar isso no final do seu arquivo:
}
E use-o assim se quiser que seja em um rótulo de texto:
Ou imprima-o como um Int:
fonte
Eu preferiria a abordagem NSNumber e NumberFormatter (quando necessário), também você pode usar a extensão para evitar o inchaço do código
Você também pode precisar de abordagem reversa
fonte
LossLessStringConvertible
protocolo em vez de estender Duploextension LosslessStringConvertible { var string: String { return .init(self) } }
Swift 5 : use o seguinte código
fonte
String(format: "%.\(points)f", self)
porString(format: "%.*f", points, self)