小数点以下2桁に切り上げます


88

currentRatio小数点以下2桁に切り上げるにはどうすればよいですか?

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

あなただけのラウンドにしたいですかcurrentRatio2桁まで、または常にラウンドアップ?例:3.141-> 3.14または3.141-> 3.14が必要ですか?
JAL

こんにちはJAL、3.149を3.15として表示したいです。ただし、3.141は3.14を表示するはずです。ありがとう
Del Hinds 2016年

正しい丸めについては、私の答えの最初の部分を参照してください。
JAL

回答:


174

フォーマット文字列を使用して小数点以下2桁に切り上げdouble、を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"

小数点以下第2位を切り上げる場合は、3.15にする必要があります。
Matt Le Fleur 2016年

OPは、必要に応じて切り上げまたは切り下げを行い、小数点以下2桁に丸めたいと思っていました。説明を求めるコメントを追加しました。
JAL

こんにちはジャル、ありがとう、私は次のようにわずかな変更を加えて機能したあなたの答えを使用しました:-_ = Double(rxCurrentTextField.text!)!/ダブル(txCurrentTextField.text!)!railRatioLabelField.text!= String(format: "%.2f"、currentRatio)
Del Hinds

2
この回答は、「テキストラベルに2桁のDoubleを表示する方法」または「...を文字列として表示する方法」という質問に対するものです。この回答は「2桁を小数点以下2桁に
切り上げる

@JALたとえば、ポイントの後にolny.5または0が必要です。23.4の場合は23.5になり、23.8の場合は24.0になります
第一人者

33

(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)に変換したかったのです。あなたの拡張機能は私の問題を解決しました。ありがとうございました!
マルセロ

:-)ハッピーコーディング
Mehul

あなたの答えが正解だと思います。funcに構文変更を追加したいだけです。func round(to places: Int) -> Double {
23inhouse

1
@ 23inhouse、私はあなたの提案に従って答えを更新しました。おかげで
Mehul

29

SWIFT4と質問に対する適切な回答に更新されました

小数点以下2桁まで切り上げたい場合は、100を掛けてから四捨五入してから、100で割ります。

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

1
こんにちは-特定の小数点以下の桁数を返すという点で、どのように計算を行うのかわかりません。小数点以下3桁を返したい場合はどうすればよいですか?
Sipho Koza

@SiphoKozaは、1000を掛けてから、1000で割ります
ChetanRajagiri18年

内部的には、数値は基数2で浮動小数点に保存され、基数10の数値を表現しようとしているため、これは実際には「適切な」答えではありません。一部の数値では正確な表現がなく、値を出力しようとすると桁数が多すぎます。正しい答えは、DoubleやFloatではなく、文字列を返す必要があります。
ビクターエンゲル

@levanゼロでも機能します。ダブルであることを確認してください
ChetanRajagiri19年

1
素晴らしい答えです。これは受け入れられるべきだと思います。
אוריorihpt

15

この目的で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

私は多くのことを経験しました、これはBY FAR、最良の解決策です!どうもありがとうございます!
kalafun

13

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 2017年

4

小数点以下の特定の数字のコードは次のとおりです。

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

ここで、%。2fは、この数値を小数点以下2桁に丸めるようにswiftに指示します。


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

私のような初心者のための簡単なフォローアップの答え:

出力付きの関数を使用すると、他の回答を非常に簡単に実装できます。例えば

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

このように、小数点以下2桁までの値を取得する場合は、入力するだけです。

twoDecimals( 'ここにあなたの番号')

..。

シンプル!

Ps次のように文字列変換後に再度変換することで、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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.