Làm tròn gấp đôi đến 2 chữ số thập phân


85

Làm cách nào để làm tròn currentRatiođến hai chữ số thập phân?

let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)!
railRatioLabelField.text! = "\(currentRatio)"

Bạn muốn chỉ làm tròn currentRatiođến hai chữ số thập phân hay luôn làm tròn? Ví dụ: bạn muốn 3,141 -> 3,14 hay 3,141 -> 3,14?
JAL

Xin chào JAL, tôi muốn 3,149 hiển thị dưới dạng 3,15. Tuy nhiên 3.141 sẽ hiển thị 3.14. Cảm ơn
Del Hinds

Xem phần đầu tiên của câu trả lời của tôi để làm tròn chính xác.
JAL

Câu trả lời:


170

Sử dụng một chuỗi định dạng để lên tròn đến hai chữ số thập phân và chuyển đổi doubleđến một String:

let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)!
railRatioLabelField.text! = String(format: "%.2f", currentRatio)

Thí dụ:

let myDouble = 3.141
let doubleStr = String(format: "%.2f", myDouble) // "3.14"

Nếu bạn muốn làm tròn số thập phân cuối cùng của mình, bạn có thể làm như sau (cảm ơn Phoen1xUK):

let myDouble = 3.141
let doubleStr = String(format: "%.2f", ceil(myDouble*100)/100) // "3.15"

Cần phải là 3,15 nếu làm tròn đến hai chữ số thập phân.
Matt Le Fleur

Tôi nghĩ OP chỉ muốn làm tròn đến hai chữ số thập phân, làm tròn lên hoặc xuống khi cần thiết. Chỉ cần thêm một bình luận yêu cầu làm rõ.
JAL

Xin chào Jal, Cảm ơn bạn, tôi đã sử dụng câu trả lời của bạn với một sửa đổi nhỏ như sau: - _ = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)! railRatioLabelField.text! = String (định dạng: "% 2f", tỷ số thanh khoản hiện thời)
Del Hinds

2
Câu trả lời này là câu hỏi: "Làm thế nào để hiển thị đôi với hai chữ số trong nhãn văn bản" hoặc "... như chuỗi", câu trả lời này không trả lời câu hỏi 'Vòng lên gấp đôi lên 2 chữ số thập phân'
MNL

@JAL tôi cần olny .5 hoặc 0 sau điểm Đối với người yêu cũ. nếu chúng ta có 23,4 thì nó sẽ cho 23,5 và nếu 23,8 thì nó sẽ là 24,0
guru

29

(Swift 4.2 Xcode 11) Tiện ích mở rộng dễ sử dụng: -

extension Double {
    func round(to places: Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}

Sử dụng:-

if let distanceDb = Double(strDistance) {
   cell.lblDistance.text = "\(distanceDb.round(to:2)) km"
}

Xuất sắc. Tôi thực sự muốn chuyển đổi sang cùng một thuộc tính (gấp đôi). Tiện ích của bạn đã giải quyết vấn đề của tôi. Cảm ơn bạn!
Marcelo dos Santos

:-) Chúc mừng mã hóa
Mehul

Tôi nghĩ câu trả lời của bạn là chính xác. Tôi chỉ muốn thêm một sửa đổi cú pháp vào func. func round(to places: Int) -> Double {
23inhouse

1
@ 23inhouse, tôi đã cập nhật câu trả lời theo gợi ý của bạn. Cảm ơn
Mehul

28

Đã cập nhật thành SWIFT 4 và câu trả lời thích hợp cho câu hỏi

Nếu bạn muốn làm tròn đến 2 chữ số thập phân, bạn nên nhân với 100, sau đó làm tròn và chia cho 100

var x = 1.5657676754 
var y = (x*100).rounded()/100
print(y)  // 1.57 

1
Xin chào - Tôi không hiểu cách bạn thực hiện phép tính của mình khi trả về một số thập phân nhất định. Điều gì sẽ xảy ra nếu tôi muốn nó trả về 3 chữ số thập phân?
Sipho Koza

@SiphoKoza chỉ cần nhân nó với 1000 rồi chia cho 1000
Chetan Rajagiri

Đây thực sự không phải là câu trả lời "thích hợp" bởi vì bên trong, số được lưu dưới dạng dấu phẩy động, với cơ số 2 và bạn đang cố gắng biểu diễn một số cơ sở 10. Đối với một số con số, không có đại diện chính xác và bạn sẽ gặp phải quá nhiều chữ số khi in giá trị. Câu trả lời thích hợp sẽ trả về một chuỗi, không phải là Double hoặc Float.
Victor Engel

@levan Nó hoạt động cho zero quá, chỉ cần đảm bảo đó là một đôi
Chetan Rajagiri

1
Câu trả lời tuyệt vời, tôi nghĩ rằng đây là câu trả lời được chấp nhận.
אורי bắt đầu từ

13

Cân nhắc sử dụng NumberFormatter cho mục đích này, nó cung cấp tính linh hoạt hơn nếu bạn muốn in dấu phần trăm của tỷ lệ hoặc nếu bạn có những thứ như tiền tệ và số lớn.

let amount = 10.000001
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
let formattedAmount = formatter.string(from: amount as NSNumber)! 
print(formattedAmount) // 10

11

Thêm vào câu trả lời trên nếu chúng ta muốn định dạng Double nhiều lần, chúng ta có thể sử dụng phần mở rộng giao thức của Double như bên dưới:

extension Double {
    var dollarString:String {
        return String(format: "$%.2f", self)
    }
}

let a = 45.666

print(a.dollarString) //will print "$45.67"

1
Không nên in (a.dollarString)?
glm4

5

Mã cho các chữ số cụ thể sau số thập phân là:

var roundedString = String(format: "%.2f", currentRatio)

Ở đây% .2f cho biết nhanh chóng làm cho số này được làm tròn thành 2 chữ số thập phân.


4

@Round , Một trình bao bọc thuộc tính 5.1 nhanh chóng Ví dụ:

struct GameResult {
    @Rounded(rule: NSDecimalNumber.RoundingMode.up,scale: 4)
    var score: Decimal
}

var result = GameResult()
result.score = 3.14159265358979
print(result.score) // 3.1416

2
String(format: "%.2f", Double(round(1000*34.578)/1000))

Đầu ra: 34,58


0

Chỉ là một câu trả lời tiếp theo cho những người không thích như tôi:

Bạn có thể thực hiện các câu trả lời khác một cách siêu dễ dàng bằng cách sử dụng một hàm có đầu ra . Ví dụ

  func twoDecimals(number: Float) -> String{
    return String(format: "%.2f", number)
}

Bằng cách này, bất cứ khi nào bạn muốn lấy một giá trị đến 2 chữ số thập phân, bạn chỉ cần nhập

twoDecimals (' Số của bạn ở đây ')

...

Các mẫu!

Ps Bạn cũng có thể làm cho nó trả về giá trị Float hoặc bất kỳ thứ gì bạn muốn, bằng cách chuyển đổi lại sau khi chuyển đổi Chuỗi như sau:

 func twoDecimals(number: Float) -> Float{
    let stringValue = String(format: "%.2f", number)
    return Float(stringValue)!
}

Hy vọng rằng sẽ giúp.


-1

nếu bạn cho nó 234.545332233 nó sẽ cho bạn 234.54

let textData = Double(myTextField.text!)!
let text = String(format: "%.2f", arguments: [textData])
mylabel.text = text

-3

Chỉ một dòng mã:

 let obj = self.arrayResult[indexPath.row]
 let str = String(format: "%.2f", arguments: [Double((obj.mainWeight)!)!])
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.