Saltar al contenido

Obtener la parte decimal de un doble en Swift

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *