스위프트 - 소수점이 0인 경우 플로트에서 소수점을 제거하는 방법은 무엇입니까?
십진법 하나로 거리를 표시하고 있는데, 이 십진법이 0인 경우(ex: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
스위프트 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)
}
}
NS 번호 사용형식:
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")
}
반환:
3
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)
3
sampleValue = 3
print(sampleValue.cleanValue)
3
플레이그라운드 샘플 파일이 여기 있습니다.
swift 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 5.5를 통해 쉽게 사용할 수 있습니다.
그냥 새것을 사용하세요.formatted()
기본값이 있는 apiFloatingPointFormatStyle
:
let values: [Double] = [1.0, 4.5, 100.0, 7]
for value in values {
print(value.formatted(FloatingPointFormatStyle()))
}
// prints "1, 4.5, 100, 7"
이미 언급한 대로 확장 기능을 사용할 수 있습니다. 이 솔루션은 다음과 같이 조금 짧습니다.
extension Float {
var shortValue: String {
return String(format: "%g", self)
}
}
사용 예시:
var sample: Float = 3.234
print(sample.shortValue)
더블을 위한 스위프트 5 그것은 @Frankie의 플로트에 대한 답변과 같습니다.
var dec: Double = 1.0
dec.clean // 1
연장을 위하여
extension Double {
var clean: String {
return self.truncatingRemainder(dividingBy: 1) == 0 ? String(format: "%.0f", self) : String(self)
}
}
스위프트 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)//
}
}
//사용방법 - (.)점 뒤에 두 글자 이상을 입력하면 마지막 글자가 자동으로 잘라지고 점 뒤에 두 글자만 표시됩니다.
let strValue = "32.12"
print(\(CGFloat(strValue).cleanValue)
후행 0 없이 최대 분수 자릿수로 형식 지정
이 시나리오는 사용자 지정 출력 정밀도를 원하는 경우에 적합합니다.이 솔루션은 대략 숫자만큼 빠릅니다.MirekE의 Formatter + NSNumber 솔루션이지만 NSObject를 사용하지 않는 것이 한 가지 이점이 될 수 있습니다.
extension Double {
func string(maximumFractionDigits: Int = 2) -> String {
let s = String(format: "%.\(maximumFractionDigits)f", self)
var offset = -maximumFractionDigits - 1
for i in stride(from: 0, to: -maximumFractionDigits, by: -1) {
if s[s.index(s.endIndex, offsetBy: i - 1)] != "0" {
offset = i
break
}
}
return String(s[..<s.index(s.endIndex, offsetBy: offset)])
}
}
(또한 함께 작동합니다.extension Float
, 그러나 macOS 전용 유형은 아닙니다.Float80
)
용도:myNumericValue.string(maximumFractionDigits: 2)
아니면myNumericValue.string()
출력값maximumFractionDigits: 2
:
1.0 → "1"
0.12 → "0.12"
0.012 → "0.01"
0.0012 → "0"
0.00012 → "0"
단순:
Int(floor(myFloatValue))
NS넘버포매터는 당신의 친구입니다.
let distanceFloat: Float = (currentUser.distance! as NSString).floatValue
let numberFormatter = NSNumberFormatter()
numberFormatter.positiveFormat = "###0.##"
let distance = numberFormatter.stringFromNumber(NSNumber(float: distanceFloat))!
distanceLabel.text = distance + " Km"
전체 코드는 여기 있습니다.
let numberA: Float = 123.456
let numberB: Float = 789.000
func displayNumber(number: Float) {
if number - Float(Int(number)) == 0 {
println("\(Int(number))")
} else {
println("\(number)")
}
}
displayNumber(numberA) // console output: 123.456
displayNumber(numberB) // console output: 789
여기에 가장 중요한 대사가 자세히 나와 있습니다.
func displayNumber(number: Float) {
- 플로트의 십진 숫자를 다음과 같이 제거합니다.
Int(number)
. - 제거된 숫자를 다시 플로트로 되돌려서 작업을 수행합니다.
Float(Int(number))
. - 다음과 같은 10진수 값을(를)
number - Float(Int(number))
- 10진수 값이 비어 있는지 확인합니다.
if number - Float(Int(number)) == 0
if문과 other문 안에 있는 내용은 설명할 필요가 없습니다.
이것도 도움이 될 것 같습니다.
extension Float {
func cleanValue() -> String {
let intValue = Int(self)
if self == 0 {return "0"}
if self / Float (intValue) == 1 { return "\(intValue)" }
return "\(self)"
}
}
용도:
let number:Float = 45.23230000
number.cleanValue()
아마도요.stringByReplacingOccurrencesOfString
도와드릴 수 있습니다 :)
let aFloat: Float = 1.000
let aString: String = String(format: "%.1f", aFloat) // "1.0"
let wantedString: String = aString.stringByReplacingOccurrencesOfString(".0", withString: "") // "1"
언급URL : https://stackoverflow.com/questions/31390466/swift-how-to-remove-a-decimal-from-a-float-if-the-decimal-is-equal-to-0
'source' 카테고리의 다른 글
다른 테이블에서 추출한 테이블 레코드에 INSERT를 수행하는 방법 (0) | 2023.09.07 |
---|---|
Make footer stick to bottom of page correctly (0) | 2023.09.07 |
백업만 복사 옵션의 의미는 무엇입니까? (0) | 2023.09.07 |
SQL에서 업데이트를 위해 서브스트링을 사용하려면 어떻게 해야 합니까? (0) | 2023.09.07 |
Python: pandas dataframe의 두 열(변수)을 기준으로 빈도수를 구하면 일부 행이 나타납니다. (0) | 2023.09.07 |