Ten en cuenta que en las ciencias cualquier problema casi siempre tiene diversas resoluciones, no obstante nosotros te enseñamos lo mejor y más óptimo.
Solución:
Puedes usar truncatingRemainder
y 1
como el divisor.
Devuelve el resto de este valor dividido por el valor dado usando una división truncada.
documento de manzana
Ejemplo:
let myDouble1: Double = 12.25
let myDouble2: Double = 12.5
let myDouble3: Double = 12.75
let remainder1 = myDouble1.truncatingRemainder(dividingBy: 1)
let remainder2 = myDouble2.truncatingRemainder(dividingBy: 1)
let remainder3 = myDouble3.truncatingRemainder(dividingBy: 1)
remainder1 -> 0.25
remainder2 -> 0.5
remainder3 -> 0.75
El mismo enfoque que Alessandro Ornano implementó como una propiedad de instancia del protocolo FloatingPoint:
Xcode 11 • Swift 5.1
import Foundation
extension FloatingPoint
var whole: Self modf(self).0
var fraction: Self modf(self).1
1.2.whole // 1
1.2.fraction // 0.2
Si necesita los dígitos de fracción y conserva sus dígitos de precisión, deberá usar Swift Decimal
escriba e inicialícelo con un String
:
extension Decimal
func rounded(_ roundingMode: NSDecimalNumber.RoundingMode = .bankers) -> Decimal
var result = Decimal()
var number = self
NSDecimalRound(&result, &number, 0, roundingMode)
return result
var whole: Decimal self < 0 ? rounded(.up) : rounded(.down)
var fraction: Decimal self - whole
let decimal = Decimal(string: "1234.99999999")! // 1234.99999999
let fractional = decimal.fraction // 0.99999999
let whole = decimal.whole // 1234
let sum = whole + fractional // 1234.99999999
Sin convertirlo en un stringpuede redondear hacia arriba a un número de lugares decimales como este:
let x:Double = 1234.5678
let numberOfPlaces:Double = 4.0
let powerOfTen:Double = pow(10.0, numberOfPlaces)
let targetedDecimalPlaces:Double = round((x % 1.0) * powerOfTen) / powerOfTen
Su salida sería
0.5678
valoraciones y comentarios
No se te olvide dar visibilidad a esta sección si te fue de ayuda.