아래는 이전에 소수점을 소수점 이하 두 자리로 자른 방법입니다.
NSLog(@" %.02f %.02f %.02f", r, g, b);
문서와 eBook을 확인했지만 확인할 수 없었습니다. 감사!
답변
David의 답변에 따라 지금까지 가장 좋은 해결책은 다음과 같습니다 .
import Foundation
extension Int {
func format(f: String) -> String {
return String(format: "%\(f)d", self)
}
}
extension Double {
func format(f: String) -> String {
return String(format: "%\(f)f", self)
}
}
let someInt = 4, someIntFormat = "03"
println("The integer number \(someInt) formatted with \"\(someIntFormat)\" looks like \(someInt.format(someIntFormat))")
// The integer number 4 formatted with "03" looks like 004
let someDouble = 3.14159265359, someDoubleFormat = ".3"
println("The floating point number \(someDouble) formatted with \"\(someDoubleFormat)\" looks like \(someDouble.format(someDoubleFormat))")
// The floating point number 3.14159265359 formatted with ".3" looks like 3.142
나는 이것이 포맷 작업을 데이터 유형에 직접 연결하는 가장 신속한 솔루션이라고 생각합니다. 어딘가에 서식 작업 라이브러리가 내장되어 있거나 곧 출시 될 수 있습니다. 언어는 아직 베타 버전입니다.
답변
간단한 방법은 다음과 같습니다.
import Foundation // required for String(format: _, _)
print(String(format: "hex string: %X", 123456))
print(String(format: "a float number: %.5f", 1.0321))
답변
나는 String.localizedStringWithFormat
꽤 잘 작동하는 것을 발견 했다.
예:
let value: Float = 0.33333
let unit: String = "mph"
yourUILabel.text = String.localizedStringWithFormat("%.2f %@", value, unit)
답변
이것은이다 매우 신속 하고 간단하게 복잡한 솔루션을 필요로하지 않는 방법입니다.
let duration = String(format: "%.01f", 3.32323242)
// result = 3.3
답변
여기에 대부분의 답변이 유효합니다. 그러나 숫자를 자주 포맷하는 경우 Float 클래스를 확장하여 포맷 된 문자열을 반환하는 메서드를 추가하는 것이 좋습니다. 아래 예제 코드를 참조하십시오. 이것은 숫자 포맷터와 확장자를 사용하여 동일한 목표를 달성합니다.
extension Float {
func string(fractionDigits:Int) -> String {
let formatter = NSNumberFormatter()
formatter.minimumFractionDigits = fractionDigits
formatter.maximumFractionDigits = fractionDigits
return formatter.stringFromNumber(self) ?? "\(self)"
}
}
let myVelocity:Float = 12.32982342034
println("The velocity is \(myVelocity.string(2))")
println("The velocity is \(myVelocity.string(1))")
콘솔은 다음을 보여줍니다 :
The velocity is 12.33
The velocity is 12.3
SWIFT 3.1 업데이트
extension Float {
func string(fractionDigits:Int) -> String {
let formatter = NumberFormatter()
formatter.minimumFractionDigits = fractionDigits
formatter.maximumFractionDigits = fractionDigits
return formatter.string(from: NSNumber(value: self)) ?? "\(self)"
}
}
답변
문자열 보간으로는 아직 할 수 없습니다. 가장 좋은 방법은 여전히 NSString 형식입니다.
println(NSString(format:"%.2f", sqrt(2.0)))
파이썬에서 외삽하면 합리적인 구문처럼 보입니다.
@infix func % (value:Double, format:String) -> String {
return NSString(format:format, value)
}
그러면 다음과 같이 사용할 수 있습니다.
M_PI % "%5.3f" // "3.142"
모든 숫자 유형에 대해 유사한 연산자를 정의 할 수 있지만 불행하게도 제네릭으로 수행하는 방법을 찾지 못했습니다.
스위프트 5 업데이트
스위프트 (5)는, 적어도 현재 String
직접 지원 format:
이니셜 때문에 사용할 필요가 없다 NSString
과 @infix
속성은 더 이상으로 작성해야 위의 샘플을 의미하는 필요합니다 :
println(String(format:"%.2f", sqrt(2.0)))
func %(value:Double, format:String) -> String {
return String(format:format, value)
}
Double.pi % "%5.3f" // "3.142"
답변
왜 그렇게 복잡하게 만드나요? 대신 이것을 사용할 수 있습니다 :
import UIKit
let PI = 3.14159265359
round( PI ) // 3.0 rounded to the nearest decimal
round( PI * 100 ) / 100 //3.14 rounded to the nearest hundredth
round( PI * 1000 ) / 1000 // 3.142 rounded to the nearest thousandth
Playground에서 작동하는지 확인하십시오.
추신 : 솔루션 : http://rrike.sh/xcode/rounding-various-decimal-places-swift/