소수점 2 자리까지 두 배 반올림


85

currentRatio소수점 이하 두 자리 까지 반올림하려면 어떻게합니까 ?

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

당신이 바로 라운드 하시겠습니까 currentRatio라운드까지 항상 두 개의 소수점, 또는를? 예 : 3.141-> 3.14 또는 3.141-> 3.14를 원하십니까?
JAL

안녕하세요 JAL, 3.149를 3.15로 표시하고 싶습니다. 그러나 3.141은 3.14를 표시해야합니다. 감사합니다
Del Hinds

올바른 반올림은 내 대답의 첫 번째 부분을 참조하십시오.
JAL

답변:


170

형식 문자열을 사용하여 소수점 이하 두 자리까지 반올림하고 double를 a 로 변환합니다 String.

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

예:

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

마지막 소수점 자리를 반올림하려면 다음과 같이 할 수 있습니다 (Phoen1xUK에게 감사드립니다).

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

소수점 이하 두 자리로 반올림하려면 3.15 여야합니다.
Matt Le Fleur

OP가 소수점 이하 두 자리로 반올림하고 필요에 따라 반올림하거나 반올림하기를 원한다고 생각했습니다. 설명을 요청하는 댓글을 추가했습니다.
JAL

안녕하세요 Jal, 감사합니다. 다음과 같이 약간의 수정으로 작업 한 답변을 사용했습니다 .- _ = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)! railRatioLabelField.text! = String (형식 : "% .2f", currentRatio)
Del Hinds

2
이 대답은 "텍스트 레이블에 두 자리 숫자로 Double을 표시하는 방법"또는 "... 문자열"이라는 질문에 대한 것입니다.이 대답은 "소수점 2 자리까지 두 배 반올림"질문에 대답하지 않습니다.
mnl

@JAL 나는 예를 들어 점 이후에 olny .5 또는 0이 필요합니다. 23.4가 있으면 23.5를, 23.8이 24.0을 가져야합니다
전문가

29

(Swift 4.2 Xcode 11) 사용이 간편한 확장 기능 :-

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

사용하다:-

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

훌륭한. 실제로 동일한 속성 (double)으로 변환하고 싶었습니다. 귀하의 확장으로 내 문제가 해결되었습니다. 감사합니다!
Marcelo dos Santos 19 년

:-) 행복 코딩
Mehul

나는 당신이 정답이라고 생각합니다. func에 구문 수정을 추가하고 싶습니다. func round(to places: Int) -> Double {
23inhouse

1
@ 23inhouse, 귀하의 제안에 따라 답변을 업데이트했습니다. 감사합니다
Mehul

28

SWIFT 4 및 질문에 대한 올바른 답변으로 업데이트되었습니다.

소수점 2 자리까지 반올림하려면 100을 곱한 다음 반올림 한 다음 100으로 나눕니다.

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

1
안녕하세요-특정 소수점 수를 반환하는 측면에서 계산 방법을 이해하지 못합니다. 소수점 3 자리를 반환하려면 어떻게해야합니까?
Sipho Koza

단지 곱셈을 1000로하고 1000 분할 @SiphoKoza
Chetan에 Rajagiri에게

내부적으로는 숫자가 2 진법 인 부동 소수점에 저장되고 10 진법의 숫자를 나타내려고하기 때문에 이것은 실제로 "적절한"대답이 아닙니다. 일부 숫자의 경우 정확한 표현이 아니며 값을 인쇄 할 때 너무 많은 숫자가 표시됩니다. 올바른 대답은 Double 또는 Float가 아닌 문자열을 반환해야합니다.
Victor Engel

그것은 너무 제로 작동 @levan, 그냥 이중의 확인
Chetan에 Rajagiri

1
좋은 대답, 나는 이것이 받아 들여야한다고 생각합니다.
אורי orihpt

13

이 목적으로 NumberFormatter를 사용하는 것이 좋습니다. 비율의 백분율 기호를 인쇄하려는 경우 또는 통화 및 큰 숫자와 같은 항목이있는 경우 더 많은 유연성을 제공합니다.

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

Double을 여러 번 포맷하려면 위의 답변에 추가하면 아래와 같이 Double의 프로토콜 확장을 사용할 수 있습니다.

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

let a = 45.666

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

1
print (a.dollarString) 안 되나요?
glm4

5

소수점 이하 특정 숫자의 코드는 다음과 같습니다.

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

여기서 % .2f는이 숫자를 소수점 이하 2 자리로 반올림하도록 신속하게 알려줍니다.


4

@Rounded , 신속한 5.1 속성 래퍼 예 :

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))

출력 : 34.58


0

나 같은 멍청한 사람들을위한 빠른 후속 답변 :

출력 기능을 사용하여 다른 답변을 매우 쉽게 구현할 수 있습니다 . 예

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

이렇게하면 소수점 이하 2 자리까지 값을 입력하고 싶을 때

twoDecimals ( ' 여기에 숫자 ')

...

단순하다!

추신 또한 다음과 같이 문자열 변환 후 다시 변환 하여 Float 값 또는 원하는 것을 반환하도록 만들 수 있습니다 .

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

도움이되기를 바랍니다.


-1

234.545332233을 주면 234.54가됩니다.

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

-3

한 줄의 코드 :

 let obj = self.arrayResult[indexPath.row]
 let str = String(format: "%.2f", arguments: [Double((obj.mainWeight)!)!])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.