Abaixo está como eu teria previamente truncado um float com duas casas decimais
NSLog(@" %.02f %.02f %.02f", r, g, b);
Verifiquei os documentos e o eBook, mas não consegui descobrir. Obrigado!
Minha melhor solução até agora, seguindo a resposta de David :
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
Eu acho que essa é a solução mais rápida, vinculando as operações de formatação diretamente ao tipo de dados. Pode ser que exista uma biblioteca interna de operações de formatação em algum lugar ou talvez ela seja lançada em breve. Lembre-se de que o idioma ainda está na versão beta.
uma maneira simples é:
fonte
println(String(format: "a float number: %.5f", 1.0321))
printf
sem a necessidade de escrever extensões separadas.import Foundation
Eu achei
String.localizedStringWithFormat
que funcionou muito bem:Exemplo:
fonte
Essa é uma maneira muito rápida e simples que não precisa de solução complexa.
fonte
Col 16: 'init' has been renamed to 'init(describing:)'
A maioria das respostas aqui são válidas. No entanto, caso você formate o número com frequência, considere estender a classe Float para adicionar um método que retorne uma string formatada. Veja o código de exemplo abaixo. Este atinge o mesmo objetivo usando um formatador e extensão de número.
O console mostra:
Atualização SWIFT 3.1
fonte
NSNumberFormatter
, como esta resposta. As outras respostas altamente votadas simplesmente não refletem as configurações de localidade do dispositivo (por exemplo, em algumas localidades, elas usam vírgula para uma casa decimal; isso reflete isso; outras respostas não).NSNumberFormatter
é bastante lenta para inicializar. Se possível, ajuda a definir um e reutilizá-lo. Dito isto, estou aqui lendo esta pergunta, porque isso não é possível no meu caso.Você ainda não pode fazer isso com interpolação de strings. Sua melhor aposta ainda será a formatação NSString:
Extrapolando do python, parece que uma sintaxe razoável pode ser:
O que permite que você os use como:
Você pode definir operadores semelhantes para todos os tipos numéricos, infelizmente não encontrei uma maneira de fazer isso com genéricos.
Atualização do Swift 5
Pelo menos no Swift 5,
String
suporta diretamente oformat:
inicializador, portanto não há necessidade de usarNSString
e o@infix
atributo não é mais necessário, o que significa que as amostras acima devem ser escritas como:fonte
[NSString stringWithFormat...
Por que torná-lo tão complicado? Você pode usar isso:
Veja como funciona no Playground.
PS: Solução de: http://rrike.sh/xcode/rounding-various-decimal-places-swift/
fonte
Uso
fonte
Uma solução mais elegante e genérica é reescrever o
%
operador ruby / python :fonte
"Hello %@, This is pi : %.2f" % ["World", M_PI]
funciona, mas estranhamente"%@ %@" % ["Hello", "World"]
aumentacan't unsafeBitCast
... Acho que isso será corrigido na próxima versão.,
é um operador de caractere válido, no Swift e na maioria dos idiomas. Além disso, é melhor usar o%
operador que já existe em outros idiomas. Veja developer.apple.com/library/ios/documentation/Swift/Conceptual/…Swift 4
fonte
Você ainda pode usar o NSLog no Swift como no Objective-C, apenas sem o sinal @.
Edit: Depois de trabalhar com Swift há algum tempo, eu gostaria de adicionar também essa variação
Resultado:
fonte
Detalhes
Solução 1
func arredondado () -> duplo
func arredondado (_ regra: FloatingPointRoundingRule) -> Duplo
mutando func round ()
mutando func round (_ regra: FloatingPointRoundingRule)
Solução 2
Uso
Amostra completa
Resultado
fonte
fonte
As respostas dadas até o momento e que receberam mais votos dependem dos métodos NSString e exigirão que você tenha importado o Foundation.
Tendo feito isso, no entanto, você ainda tem acesso ao NSLog.
Então eu acho que a resposta para a pergunta, se você está perguntando como continuar usando o NSLog no Swift, é simplesmente:
import Foundation
fonte
fonte
aqui uma solução rápida "pura"
fonte
Poder de extensão
Saída: A velocidade é 12,3
fonte
menos maneira de digitar:
fonte
Você também pode criar um operador dessa maneira
fonte
Também com arredondamento:
fonte
use o método abaixo
fonte
Uma versão do operador ruby / python% de Vincent Guerci, atualizada para o Swift 2.1:
fonte
Muitas boas respostas acima, mas às vezes um padrão é mais apropriado do que o tipo "% .3f" de palavrões. Aqui está minha opinião usando um NumberFormatter no Swift 3.
Aqui, eu queria que duas casas decimais fossem sempre mostradas, mas a terceira apenas se não fosse zero.
fonte
Swift 4 Xcode 10 Atualizar
fonte
E as extensões nos tipos Double e CGFloat:
Uso:
impressões: 112 465 848 348 508,46
fonte
fonte
Eu não sei sobre duas casas decimais, mas aqui está como você pode imprimir carros alegóricos com zero casas decimais, então eu imagino que podem ser 2 casas, 3 casas ... (Nota: você deve converter CGFloat em Double para passar para String (formato :) ou verá um valor zero)
fonte
Exemplo Swift2: largura da tela do dispositivo iOS formatando o Float removendo o decimal
fonte
@Christian Dietrich:
ao invés de:
também pode ser:
[correção:] Desculpe pela confusão * - Claro que isso funciona com Doubles. Eu acho que, mais prático (se você quiser que os dígitos sejam arredondados, não cortados), seria algo assim:
Apenas para Float, basta substituir Double por Float, pow com powf e arredondar com roundf.
Atualização: achei mais prático usar o tipo de retorno Double em vez de String. Funciona da mesma forma para a saída String, ou seja:
prints: Pi é aproximadamente 3.142
Portanto, você pode usá-lo da mesma maneira para Strings (você ainda pode escrever: println (d ~> 2)), mas também pode usá-lo para arredondar valores diretamente, ou seja:
ou o que você precisar ...
fonte
usar
ou
fonte