Pensé que el OP solo quería redondear a dos lugares decimales, redondeando hacia arriba o hacia abajo según sea necesario. Acabo de agregar un comentario pidiendo una aclaración.
JAL
Hola Jal, Gracias, usé tu respuesta que funcionó con una ligera modificación de la siguiente manera: - _ = Double (rxCurrentTextField.text!)! / Doble (txCurrentTextField.text!)! railRatioLabelField.text! = Cadena (formato: "% .2f", currentRatio)
Del Hinds
2
Esta respuesta es a la pregunta: "Cómo mostrar el doble con dos dígitos en la etiqueta de texto" o "... como cadena", esta respuesta no responde a la pregunta "Redondea el doble a 2 lugares decimales"
mnl
@JAL necesito olny .5 o 0 después del punto Por ej. si tenemos 23,4 debería dar 23,5 y si 23,8 debería dar 24,0
Hola, no entiendo cómo haces tu cálculo en términos de devolver un cierto número de decimales. ¿Qué pasa si quiero que devuelva 3 decimales?
Sipho Koza
@SiphoKoza simplemente multiplíquelo por 1000 y luego divídalo por 1000
Chetan Rajagiri
Esta no es realmente la respuesta "correcta" porque internamente, el número se guarda en punto flotante, con es base 2, y estás tratando de representar un número base 10. Para algunos números, no hay una representación exacta y terminará con demasiados dígitos cuando imprima el valor. La respuesta adecuada debe devolver una cadena, no un Double o Float.
Victor Engel
@levan También funciona para cero, solo asegúrate de que sea un doble
Chetan Rajagiri
1
Gran respuesta, creo que esta debería ser la aceptada.
אורי orihpt
13
Considere usar NumberFormatter para este propósito, brinda más flexibilidad si desea imprimir el signo de porcentaje de la relación o si tiene cosas como moneda y números grandes.
Agregando a la respuesta anterior si queremos formatear Double varias veces, podemos usar la extensión de protocolo de Double como se muestra a continuación:
extensionDouble{
var dollarString:String {
returnString(format: "$%.2f", self)
}
}
let a = 45.666print(a.dollarString) //will print "$45.67"
De esta manera, siempre que desee tomar un valor con 2 decimales, simplemente escriba
twoDecimals (' Su número aquí ')
...
Simples!
Ps También puede hacer que devuelva un valor flotante , o cualquier cosa que desee, convirtiéndolo nuevamente después de la conversión de cadena de la siguiente manera:
currentRatio
a dos lugares decimales o siempre redondear hacia arriba? Ej .: ¿quieres 3.141 -> 3.14 o 3.141 -> 3.14?Respuestas:
Use una cadena de formato para redondear hasta dos lugares decimales y convertir el
double
aString
:let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)! railRatioLabelField.text! = String(format: "%.2f", currentRatio)
Ejemplo:
let myDouble = 3.141 let doubleStr = String(format: "%.2f", myDouble) // "3.14"
Si desea redondear su último decimal, puede hacer algo como esto (gracias Phoen1xUK):
let myDouble = 3.141 let doubleStr = String(format: "%.2f", ceil(myDouble*100)/100) // "3.15"
fuente
(Swift 4.2 Xcode 11) Extensión fácil de usar: -
extension Double { func round(to places: Int) -> Double { let divisor = pow(10.0, Double(places)) return (self * divisor).rounded() / divisor } }
Utilizar:-
if let distanceDb = Double(strDistance) { cell.lblDistance.text = "\(distanceDb.round(to:2)) km" }
fuente
func round(to places: Int) -> Double {
Actualizado a SWIFT 4 y la respuesta adecuada a la pregunta
Si desea redondear hasta 2 lugares decimales, debe multiplicar por 100, luego redondearlo y dividirlo por 100.
var x = 1.5657676754 var y = (x*100).rounded()/100 print(y) // 1.57
fuente
Considere usar NumberFormatter para este propósito, brinda más flexibilidad si desea imprimir el signo de porcentaje de la relación o si tiene cosas como moneda y 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
fuente
Agregando a la respuesta anterior si queremos formatear Double varias veces, podemos usar la extensión de protocolo de Double como se muestra a continuación:
extension Double { var dollarString:String { return String(format: "$%.2f", self) } } let a = 45.666 print(a.dollarString) //will print "$45.67"
fuente
El código para dígitos específicos después de los decimales es:
var roundedString = String(format: "%.2f", currentRatio)
Aquí el% .2f le dice al vencejo que redondee este número a 2 lugares decimales.
fuente
@Rounded , un contenedor de propiedad rápido de 5.1 Ejemplo:
struct GameResult { @Rounded(rule: NSDecimalNumber.RoundingMode.up,scale: 4) var score: Decimal } var result = GameResult() result.score = 3.14159265358979 print(result.score) // 3.1416
fuente
String(format: "%.2f", Double(round(1000*34.578)/1000))
Salida: 34,58
fuente
Solo una rápida respuesta de seguimiento para novatos como yo:
Puede hacer que las otras respuestas se puedan implementar muy fácilmente utilizando una función con una salida . P.ej
func twoDecimals(number: Float) -> String{ return String(format: "%.2f", number) }
De esta manera, siempre que desee tomar un valor con 2 decimales, simplemente escriba
twoDecimals (' Su número aquí ')
...
Simples!
Ps También puede hacer que devuelva un valor flotante , o cualquier cosa que desee, convirtiéndolo nuevamente después de la conversión de cadena de la siguiente manera:
func twoDecimals(number: Float) -> Float{ let stringValue = String(format: "%.2f", number) return Float(stringValue)! }
Espero que ayude.
fuente
si le da 234,545332233 le dará 234,54
let textData = Double(myTextField.text!)! let text = String(format: "%.2f", arguments: [textData]) mylabel.text = text
fuente
Solo una línea de código:
let obj = self.arrayResult[indexPath.row] let str = String(format: "%.2f", arguments: [Double((obj.mainWeight)!)!])
fuente