[ios] Swift-소수점이 0과 같으면 부동 소수점에서 소수점을 제거하는 방법?

소수점 하나로 거리를 표시하고 있는데, 0 (예 : 1200.0Km) 인 경우이 소수점을 제거하고 싶습니다. 어떻게 신속하게 할 수 있습니까? 이 번호를 다음과 같이 표시합니다.

let distanceFloat: Float = (currentUser.distance! as NSString).floatValue
distanceLabel.text = String(format: "%.1f", distanceFloat) + "Km"



답변

스위프트 3/4 :

var distanceFloat1: Float = 5.0
var distanceFloat2: Float = 5.540
var distanceFloat3: Float = 5.03

extension Float {
    var clean: String {
       return self.truncatingRemainder(dividingBy: 1) == 0 ? String(format: "%.0f", self) : String(self)
    }
}

print("Value \(distanceFloat1.clean)") // 5
print("Value \(distanceFloat2.clean)") // 5.54
print("Value \(distanceFloat3.clean)") // 5.03

Swift 2 (원래 답변)

let distanceFloat: Float = (currentUser.distance! as NSString).floatValue
distanceLabel.text = String(format: distanceFloat == floor(distanceFloat) ? “%.0f" : "%.1f", distanceFloat) + "Km"

또는 확장 :

extension Float {
    var clean: String {
        return self % 1 == 0 ? String(format: "%.0f", self) : String(self)
    }
}


답변

NSNumberFormatter 사용 :

let formatter = NumberFormatter()
formatter.minimumFractionDigits = 0
formatter.maximumFractionDigits = 2

// Avoid not getting a zero on numbers lower than 1
// Eg: .5, .67, etc...
formatter.numberStyle = .decimal

let nums = [3.0, 5.1, 7.21, 9.311, 600.0, 0.5677, 0.6988]

for num in nums {
    print(formatter.string(from: num as NSNumber) ?? "n/a")
}

보고:

5.1

7.21

9.31

600

0.57

0.7


답변

extension 이를 수행하는 강력한 방법입니다.

확장 :

Swift 2 용 코드 (Swift 3 이상 아님) :

extension Float {
    var cleanValue: String {
        return self % 1 == 0 ? String(format: "%.0f", self) : String(self)
    }
}

사용법 :

var sampleValue: Float = 3.234
print(sampleValue.cleanValue)

3.234

sampleValue = 3.0
print(sampleValue.cleanValue)

sampleValue = 3
print(sampleValue.cleanValue)

샘플 플레이 그라운드 파일은 여기에 있습니다 .


답변

신속한 3에 대한 수락 된 답변 업데이트 :

extension Float
{
    var cleanValue: String
    {
        return self.truncatingRemainder(dividingBy: 1) == 0 ? String(format: "%.0f", self) : String(self)
    }
}

사용법은 다음과 같습니다.

let someValue: Float = 3.0

print(someValue.cleanValue) //prints 3


답변

문자열로 형식을 지정하려면 다음 패턴을 따르십시오.

let aFloat: Float = 1.123

let aString: String = String(format: "%.0f", aFloat) // "1"
let aString: String = String(format: "%.1f", aFloat) // "1.1"
let aString: String = String(format: "%.2f", aFloat) // "1.12"
let aString: String = String(format: "%.3f", aFloat) // "1.123"

Int로 캐스트하려면 다음 패턴을 따르십시오.

let aInt: Int = Int(aFloat) // "1"

String(format:이니셜 라이저 를 사용하면 Swift는 다음 숫자를 기준으로 필요에 따라 최종 숫자를 자동으로 반올림합니다.


답변

이미 언급 한대로 확장을 사용할 수 있지만이 솔루션은 조금 더 짧습니다.

extension Float {
    var shortValue: String {
        return String(format: "%g", self)
    }
}

사용 예 :

var sample: Float = 3.234
print(sample.shortValue)


답변

에서 스위프트 4는 이것을 시도.

    extension CGFloat{
        var cleanValue: String{
            //return String(format: 1 == floor(self) ? "%.0f" : "%.2f", self)
            return self.truncatingRemainder(dividingBy: 1) == 0 ? String(format: "%.0f", self) : String(format: "%.2f", self)//
        }
    }

// 사용 방법-(.) 포인트 뒤에 2 자 이상 입력하면 자동으로 마지막 문자를 잘라 내고 포인트 뒤에 2 자만 표시합니다.

let strValue = "32.12"
print(\(CGFloat(strValue).cleanValue)