Swift 5를 사용하면 필요에 따라 9 가지 스타일 중 하나를 선택 하여에서 둥근 결과를 얻을 수 있습니다 Double
.
#1. FloatingPoint
rounded()
방법을 사용하여
가장 간단한 경우이 Double
rounded()
방법을 사용할 수 있습니다 .
let roundedValue1 = (0.6844 * 1000).rounded() / 1000
let roundedValue2 = (0.6849 * 1000).rounded() / 1000
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
# 2. FloatingPoint
rounded(_:)
방법을 사용하여
let roundedValue1 = (0.6844 * 1000).rounded(.toNearestOrEven) / 1000
let roundedValue2 = (0.6849 * 1000).rounded(.toNearestOrEven) / 1000
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
#삼. 다윈 round
기능 사용
Foundation은 round
다윈을 통해 기능을 제공합니다 .
import Foundation
let roundedValue1 = round(0.6844 * 1000) / 1000
let roundedValue2 = round(0.6849 * 1000) / 1000
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
# 4. Double
Darwin round
및 pow
함수로 빌드 된 확장 사용자 정의 방법 사용
이전 작업을 여러 번 반복하려면 코드를 리팩터링하는 것이 좋습니다.
import Foundation
extension Double {
func roundToDecimal(_ fractionDigits: Int) -> Double {
let multiplier = pow(10, Double(fractionDigits))
return Darwin.round(self * multiplier) / multiplier
}
}
let roundedValue1 = 0.6844.roundToDecimal(3)
let roundedValue2 = 0.6849.roundToDecimal(3)
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
필요한 경우 NSDecimalNumber
10 진수를 반올림하는 상세하지만 강력한 솔루션을 제공합니다.
import Foundation
let scale: Int16 = 3
let behavior = NSDecimalNumberHandler(roundingMode: .plain, scale: scale, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: true)
let roundedValue1 = NSDecimalNumber(value: 0.6844).rounding(accordingToBehavior: behavior)
let roundedValue2 = NSDecimalNumber(value: 0.6849).rounding(accordingToBehavior: behavior)
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
import Foundation
let scale = 3
var value1 = Decimal(0.6844)
var value2 = Decimal(0.6849)
var roundedValue1 = Decimal()
var roundedValue2 = Decimal()
NSDecimalRound(&roundedValue1, &value1, scale, NSDecimalNumber.RoundingMode.plain)
NSDecimalRound(&roundedValue2, &value2, scale, NSDecimalNumber.RoundingMode.plain)
print(roundedValue1) // returns 0.684
print(roundedValue2) // returns 0.685
NSString
반올림 작업에서을 반환 NSString
하려면 이니셜 라이저를 사용하는 것이 간단하지만 효율적인 솔루션입니다.
import Foundation
let roundedValue1 = NSString(format: "%.3f", 0.6844)
let roundedValue2 = NSString(format: "%.3f", 0.6849)
print(roundedValue1) // prints 0.684
print(roundedValue2) // prints 0.685
스위프트의 String
유형은 재단의 NSString
클래스 와 연결되어 있습니다. 따라서 String
반올림 작업에서 를 반환하기 위해 다음 코드를 사용할 수 있습니다 .
import Foundation
let roundedValue1 = String(format: "%.3f", 0.6844)
let roundedValue2 = String(format: "%.3f", 0.6849)
print(roundedValue1) // prints 0.684
print(roundedValue2) // prints 0.685
String?
반올림 작업에서 벗어나기 를 기대할 경우 NumberFormatter
고도로 사용자 정의 가능한 솔루션을 제공합니다.
import Foundation
let formatter = NumberFormatter()
formatter.numberStyle = NumberFormatter.Style.decimal
formatter.roundingMode = NumberFormatter.RoundingMode.halfUp
formatter.maximumFractionDigits = 3
let roundedValue1 = formatter.string(from: 0.6844)
let roundedValue2 = formatter.string(from: 0.6849)
print(String(describing: roundedValue1)) // prints Optional("0.684")
print(String(describing: roundedValue2)) // prints Optional("0.685")
round(_:)
,Double
round()
,NSString
초기화,String
초기화,NumberFormatter
더블 확장 또는NSDecimalNumber
과Decimal
.