Precisa ser 3,15 se arredondar para duas casas decimais.
Matt Le Fleur
Achei que o OP queria apenas arredondar para duas casas decimais, arredondando para cima ou para baixo conforme necessário. Acabei de adicionar um comentário pedindo esclarecimentos.
JAL de
Olá Jal, Obrigado, Usei sua resposta que funcionou com uma pequena modificação da seguinte forma: - _ = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)! railRatioLabelField.text! = String (formato: "% .2f", currentRatio)
Del Hinds
2
Esta resposta é para a pergunta: "Como exibir Double com dois dígitos no rótulo de texto" ou "... como string", esta resposta não responde à pergunta "Arredondar duplo para 2 casas decimais"
mnl
@JAL eu preciso de olny .5 ou 0 após o ponto Por ex. se temos 23,4 deve dar 23,5 e se 23,8 deve 24,0
Oi - Eu não entendo como você faz seu cálculo em termos de retornar um determinado número de casas decimais. E se eu quiser que ele retorne 3 casas decimais?
Sipho Koza
@SiphoKoza basta multiplicar por 1000 e dividir por 1000
Chetan Rajagiri
Esta não é realmente a resposta "adequada" porque internamente, o número é salvo em ponto flutuante, com sua base 2, e você está tentando representar um número de base 10. Para alguns números, não há uma representação exata e você acabará com muitos dígitos quando for imprimir o valor. A resposta adequada deve retornar uma string, não um Double ou Float.
Victor Engel
@levan Funciona para zero também, apenas certifique-se de que seja duplo
Chetan Rajagiri
1
Ótima resposta, acho que essa deve ser aceita.
אורי orihpt
15
Considere o uso de NumberFormatter para essa finalidade, ele fornece mais flexibilidade se você quiser imprimir o sinal de porcentagem da proporção ou se você tiver coisas como moeda e números grandes.
Dessa forma, sempre que você quiser levar um valor para 2 casas decimais, basta digitar
twoDecimals (' Seu número aqui ')
...
Simples!
Ps Você também pode fazer com que ele retorne um valor Float , ou qualquer coisa que você quiser, convertendo-o novamente após a conversão de String da seguinte maneira:
currentRatio
para duas casas decimais ou sempre arredondar para cima? Ex: você quer 3,141 -> 3,14 ou 3,141 -> 3,14?Respostas:
Use uma string de formato para arredondar até duas casas decimais e converter
double
emString
:let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)! railRatioLabelField.text! = String(format: "%.2f", currentRatio)
Exemplo:
let myDouble = 3.141 let doubleStr = String(format: "%.2f", myDouble) // "3.14"
Se você quiser arredondar sua última casa decimal, pode fazer algo assim (obrigado Phoen1xUK):
let myDouble = 3.141 let doubleStr = String(format: "%.2f", ceil(myDouble*100)/100) // "3.15"
fonte
(Swift 4.2 Xcode 11) Extensão simples de usar: -
extension Double { func round(to places: Int) -> Double { let divisor = pow(10.0, Double(places)) return (self * divisor).rounded() / divisor } }
Usar:-
if let distanceDb = Double(strDistance) { cell.lblDistance.text = "\(distanceDb.round(to:2)) km" }
fonte
func round(to places: Int) -> Double {
Atualizado para SWIFT 4 e a resposta adequada para a pergunta
Se você quiser arredondar para 2 casas decimais você deve multiplicar por 100, depois arredondar e dividir por 100
var x = 1.5657676754 var y = (x*100).rounded()/100 print(y) // 1.57
fonte
Considere o uso de NumberFormatter para essa finalidade, ele fornece mais flexibilidade se você quiser imprimir o sinal de porcentagem da proporção ou se você tiver coisas como moeda e números grandes.
let amount = 10.000001 let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.maximumFractionDigits = 2 let formattedAmount = formatter.string(from: amount as NSNumber)! print(formattedAmount) // 10
fonte
Adicionando a resposta acima, se quisermos formatar Double várias vezes, podemos usar a extensão de protocolo de Double como abaixo:
extension Double { var dollarString:String { return String(format: "$%.2f", self) } } let a = 45.666 print(a.dollarString) //will print "$45.67"
fonte
O código para dígitos específicos após decimais é:
var roundedString = String(format: "%.2f", currentRatio)
Aqui, o% .2f diz ao swift para fazer esse número arredondado para 2 casas decimais.
fonte
@Rounded , um exemplo de wrapper de propriedade swift 5.1:
struct GameResult { @Rounded(rule: NSDecimalNumber.RoundingMode.up,scale: 4) var score: Decimal } var result = GameResult() result.score = 3.14159265358979 print(result.score) // 3.1416
fonte
String(format: "%.2f", Double(round(1000*34.578)/1000))
Saída: 34,58
fonte
Apenas uma resposta rápida para iniciantes como eu:
Você pode tornar as outras respostas super fáceis de implementar usando uma função com uma saída . Por exemplo
func twoDecimals(number: Float) -> String{ return String(format: "%.2f", number) }
Dessa forma, sempre que você quiser levar um valor para 2 casas decimais, basta digitar
twoDecimals (' Seu número aqui ')
...
Simples!
Ps Você também pode fazer com que ele retorne um valor Float , ou qualquer coisa que você quiser, convertendo-o novamente após a conversão de String da seguinte maneira:
func twoDecimals(number: Float) -> Float{ let stringValue = String(format: "%.2f", number) return Float(stringValue)! }
Espero que ajude.
fonte
se você der 234,545332233, terá 234,54
let textData = Double(myTextField.text!)! let text = String(format: "%.2f", arguments: [textData]) mylabel.text = text
fonte
Apenas uma linha de código:
let obj = self.arrayResult[indexPath.row] let str = String(format: "%.2f", arguments: [Double((obj.mainWeight)!)!])
fonte