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 roundchức năng Darwin
Foundation cung cấp một roundchứ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 Doublephương thức tùy chỉnh mở rộng được xây dựng với Darwin roundvà powcá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, NSDecimalNumbercung 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 NSStringtừ hoạt động làm tròn của mình, sử dụng bộ NSStringkhở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
StringKiểu của Swift được bắc cầu bằng NSStringlớp Foundation . Do đó, bạn có thể sử dụng mã sau đây để trả về Stringtừ 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 NumberFormattercung 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(_:),Doubleround(),NSStringkhởi tạo,Stringkhởi tạo,NumberFormatter, mở rộng đôi hoặc thậm chíNSDecimalNumbervàDecimal.