Với Swift 5, theo nhu cầu của bạn, bạn có thể chọn một trong 9 kiểu sau để có kết quả làm tròn từ a Double
.
# 1. Sử dụng FloatingPoint
rounded()
phương pháp
Trong trường hợp đơn giản nhất, bạn có thể sử dụng Double
rounded()
phương pháp.
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. Sử dụng FloatingPoint
rounded(_:)
phương pháp
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
# 3. Sử dụng round
chức năng Darwin
Foundation cung cấp một round
chức năng thông qua Darwin.
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. Sử dụng một Double
phương thức tùy chỉnh mở rộng được xây dựng với Darwin round
và pow
các chức năng
Nếu bạn muốn lặp lại thao tác trước đó nhiều lần, tái cấu trúc mã của bạn có thể là một ý tưởng tốt.
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
Nếu cần, NSDecimalNumber
cung cấp một giải pháp dài dòng nhưng mạnh mẽ để làm tròn số thập phân.
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
Nếu bạn muốn trả về một NSString
từ hoạt động làm tròn của mình, sử dụng bộ NSString
khởi tạo là một giải pháp đơn giản nhưng hiệu quả.
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
#số 8. Sử dụng bộ String
init(format:_:)
khởi tạo
String
Kiểu của Swift được bắc cầu bằng NSString
lớp Foundation . Do đó, bạn có thể sử dụng mã sau đây để trả về String
từ hoạt động làm tròn của mình:
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
Nếu bạn muốn nhận được String?
từ hoạt động làm tròn của mình, hãy NumberFormatter
cung cấp một giải pháp tùy biến cao.
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
khởi tạo,String
khởi tạo,NumberFormatter
, mở rộng đôi hoặc thậm chíNSDecimalNumber
vàDecimal
.