Swiftの高精度文字列フォーマット指定子


395

以下は、フロートを小数点以下2桁に切り捨てる方法です。

NSLog(@" %.02f %.02f %.02f", r, g, b);

私はドキュメントと電子ブックをチェックしましたが、それを理解することができませんでした。よろしくお願いします!

回答:


277

これまでの私の最善の解決策は、Davidの返答に続くものです。

import Foundation

extension Int {
    func format(f: String) -> String {
        return String(format: "%\(f)d", self)
    }
}

extension Double {
    func format(f: String) -> String {
        return String(format: "%\(f)f", self)
    }
}

let someInt = 4, someIntFormat = "03"
println("The integer number \(someInt) formatted with \"\(someIntFormat)\" looks like \(someInt.format(someIntFormat))")
// The integer number 4 formatted with "03" looks like 004

let someDouble = 3.14159265359, someDoubleFormat = ".3"
println("The floating point number \(someDouble) formatted with \"\(someDoubleFormat)\" looks like \(someDouble.format(someDoubleFormat))")
// The floating point number 3.14159265359 formatted with ".3" looks like 3.142

これは、フォーマット操作をデータ型に直接結び付ける、最もSwiftのようなソリューションだと思います。フォーマット操作の組み込みライブラリがどこかにあるか、まもなくリリースされる可能性があります。言語はまだベータ版であることを覚えておいてください。


76
これは不必要に複雑です。realityoneの答えは機能し、はるかに簡潔です。
Steven Marlowe 14

9
あなたが一度だけそれを使っているなら、確かに。しかし、文字列補間(はるかに読みやすい)を使用してより多くの書式設定オプションが必要な場合は、すべての書式設定拡張子を別の場所にファイルに配置し、プロジェクト全体で参照することができます。もちろん、理想的にはAppleがフォーマットライブラリを提供する必要があります。
アントン・チョラコフ2014

2
このソリューションは、結果を文字列にキャストしない限り、Swift 1.2では機能しません。
ibesora 2015

いいですが、Swift 2 Friendではありません。
LastMove 2016

798

簡単な方法は次のとおりです。

import Foundation // required for String(format: _, _)

print(String(format: "hex string: %X", 123456))
print(String(format: "a float number: %.5f", 1.0321))

9
println(String(format: "a float number: %.5f", 1.0321))
zaph 2014

78
これは受け入れられた答えよりも良い答えだと思います。printf個別の拡張機能を作成する必要がなく、標準のCスタイルに非常に近くなります。
キース・モリス

9
ファイルの上部にある「インポートファンデーション」を忘れないでください。
Chris Gregg

3
これは、受け入れられた回答よりも優れていますが、(Swiftにブリッジされた)Foundationメソッドを使用しています。

1
必ずimport Foundation
NaN

125

私はString.localizedStringWithFormatかなりうまくいくことがわかりました:

例:

let value: Float = 0.33333
let unit: String = "mph"

yourUILabel.text = String.localizedStringWithFormat("%.2f %@", value, unit)

問題は荷役単位とは何の関係もありません。localizedStringWithFormatは素晴らしいですが、関連はありません。
AmitP 2016年

私はAmitPに同意します。String(format:...、arguments:...)が利用可能になる前に尋ねられました
Valentin

84

これは、複雑なソリューションを必要としない非常に高速シンプルな方法です。

let duration = String(format: "%.01f", 3.32323242)
// result = 3.3

これはコンパイルされません(IBMのSwiftサンドボックスで3.0.2を使用):Col 16: 'init' has been renamed to 'init(describing:)'
Peter Dillinger

@PeterDillingerラップされていない値の代わりにオプションを渡します。
マイケル

63

ここでのほとんどの回答は有効です。ただし、数値を頻繁にフォーマットする場合は、Floatクラスを拡張して、フォーマットされた文字列を返すメソッドを追加することを検討してください。以下のコード例を参照してください。これは、数値フォーマッターと拡張子を使用して同じ目標を達成します。

extension Float {
    func string(fractionDigits:Int) -> String {
        let formatter = NSNumberFormatter()
        formatter.minimumFractionDigits = fractionDigits
        formatter.maximumFractionDigits = fractionDigits
        return formatter.stringFromNumber(self) ?? "\(self)"
    }
}

let myVelocity:Float = 12.32982342034

println("The velocity is \(myVelocity.string(2))")
println("The velocity is \(myVelocity.string(1))")

コンソールには次のように表示されます:

The velocity is 12.33
The velocity is 12.3

SWIFT 3.1アップデート

extension Float {
    func string(fractionDigits:Int) -> String {
        let formatter = NumberFormatter()
        formatter.minimumFractionDigits = fractionDigits
        formatter.maximumFractionDigits = fractionDigits
        return formatter.string(from: NSNumber(value: self)) ?? "\(self)"
    }
}

12
NSNumberFormatterこの答えのように、もっと多くの人に使ってもらいたいです。その他の投票数の多い回答は、デバイスのロケール設定を反映できません(たとえば、一部のロケールでは、小数点にカンマを使用しています。これは、これを反映しています。他の回答では反映されません)。
Rob

3
私が見たい唯一の改善は、与えられた数のフォーマッターを保存することです-NSNumberFormatterは構築にコストがかかります。
Kendall Helmstetter Gelner 2015

1
まさに、私が探していたもの!ありがとう
gunjot sing 2016

これはやや古い質問ですがNSNumberFormatter、初期化にはかなり時間がかかります。可能であれば、それを定義して再利用すると役立ちます。とはいえ、私の場合は不可能なので、この質問を読んでいます。
promacuser 2017年

44

あなたはそれを(まだ)文字列補間で行うことはできません。あなたの最善の策は、まだNSStringのフォーマットになるでしょう:

println(NSString(format:"%.2f", sqrt(2.0)))

Pythonから外挿すると、合理的な構文は次のようになるでしょう:

@infix func % (value:Double, format:String) -> String {
    return NSString(format:format, value)
}

これにより、次のように使用できます。

M_PI % "%5.3f"                // "3.142"

すべての数値型に同様の演算子を定義できますが、残念ながらジェネリックでそれを行う方法は見つかりませんでした。

Swift 5アップデート

少なくともSwift 5以降でStringは、format:初期化子を直接サポートしているため、使用する必要はなくNSString@infix属性も不要になりました。つまり、上記のサンプルは次のように記述する必要があります。

println(String(format:"%.2f", sqrt(2.0)))

func %(value:Double, format:String) -> String {
    return String(format:format, value)
}

Double.pi % "%5.3f"         // "3.142"

その構文 `NSString(format:" formatString "、val) 'はどこで見つけましたか。アップルのiBooksのドキュメントには載っていません。
ダンカンC

1
これは、swiftからObjective-Cオブジェクトを作成するのと同じです。それはの迅速なバージョンです[NSString stringWithFormat...
デビッドベリー

ゴッチャ。私はまだSwift iBookでそれまでに得ていません。
Duncan C

Swift iBookにはなかったIIRC。WWDCセッションの1つでした。Swift Interoperability In Depth
ahruss

2
Pythonのように%を実装している場合は、逆にする必要があります。"%5.3f"%M_PI
Andy Dent

16

なぜそんなに複雑にするのですか?代わりにこれを使用できます:

import UIKit

let PI = 3.14159265359

round( PI ) // 3.0 rounded to the nearest decimal
round( PI * 100 ) / 100 //3.14 rounded to the nearest hundredth
round( PI * 1000 ) / 1000 // 3.142 rounded to the nearest thousandth

Playgroundで動作することを確認してください。

PS:解決策:http : //rrike.sh/xcode/rounding-various-decimal-places-swift/


これは断然最高の解決策ですが、これが一番上にない方法はわかりません。
pjtnt11 2015

7
nitpicky things .. 1.500000000は「1.5」ではなく「1.5」になります
styler1972

13
import Foundation

extension CGFloat {
    var string1: String {
        return String(format: "%.1f", self)
    }
    var string2: String {
        return String(format: "%.2f", self)
    }
}

使用法

let offset = CGPoint(1.23, 4.56)
print("offset: \(offset.x.string1) x \(offset.y.string1)")
// offset: 1.2 x 4.6

10

よりエレガントで汎用的なソリューションは、ruby / python %演算子を書き換えることです。

// Updated for beta 5
func %(format:String, args:[CVarArgType]) -> String {
    return NSString(format:format, arguments:getVaList(args))
}

"Hello %@, This is pi : %.2f" % ["World", M_PI]

悲しいことに、これはベータ6で終了します。致命的なエラー:異なるサイズのタイプ間でunsafeBitCastを実行できません。
binarymochi 2014

@binarymochi Beta 6の場合:"Hello %@, This is pi : %.2f" % ["World", M_PI]動作しますが、不思議な"%@ %@" % ["Hello", "World"]ことに発生しcan't unsafeBitCastます...次のバージョンで修正されると思います。
Vincent Guerci 2014

「、」を使用する演算子にできますか?'@infix func、(…'、そして "Hello%@、this is pi:%.2f"、["you"、M_PI])?
Rick

@Rickいいえ、できません。Swift ,やほとんどの言語では、有効な文字演算子ではありません。また%、他の言語で既に存在する演算子を使用する方が良いでしょう。developer.apple.com/library/ios/documentation/Swift/Conceptual/…を
Vincent Guerci 2014年

8

スウィフト4

let string = String(format: "%.2f", locale: Locale.current, arguments: 15.123)

let temp:Float = div * 100 let string = String(format: "%.2f"、locale:Locale.current、arguments:temp)それは私にエラーを与えています。タイプ 'Float'の値を予期される引数タイプ '[CVarArg]に変換できません
Chandni

それを機能させるには、15.123を配列に入れる必要があります
Dorian Roy

3
私の作品:let string = String(format: "%.2f"、myString)
Grzegorz R. Kulesza

6

@記号がなくても、Objective-Cと同様にSwiftでNSLogを使用できます。

NSLog("%.02f %.02f %.02f", r, g, b)

編集:しばらくの間Swiftで作業した後、このバリエーションも追加したいと思います

    var r=1.2
    var g=1.3
    var b=1.4
    NSLog("\(r) \(g) \(b)")

出力:

2014-12-07 21:00:42.128 MyApp[1626:60b] 1.2 1.3 1.4

6

細部

  • Xcode 9.3、Swift 4.1
  • Xcode 10.2.1(10E1001)、Swift 5

解決策1

func rounded()-> Double

(5.2).rounded()
// 5.0
(5.5).rounded()
// 6.0
(-5.2).rounded()
// -5.0
(-5.5).rounded()
// -6.0

func rounded(_ rule:FloatingPointRoundingRule)-> Double

let x = 6.5

// Equivalent to the C 'round' function:
print(x.rounded(.toNearestOrAwayFromZero))
// Prints "7.0"

// Equivalent to the C 'trunc' function:
print(x.rounded(.towardZero))
// Prints "6.0"

// Equivalent to the C 'ceil' function:
print(x.rounded(.up))
// Prints "7.0"

// Equivalent to the C 'floor' function:
print(x.rounded(.down))
// Prints "6.0"

func round()の変更

var x = 5.2
x.round()
// x == 5.0
var y = 5.5
y.round()
// y == 6.0
var z = -5.5
z.round()
// z == -6.0

mutuncing func round(_ rule:FloatingPointRoundingRule)

// Equivalent to the C 'round' function:
var w = 6.5
w.round(.toNearestOrAwayFromZero)
// w == 7.0

// Equivalent to the C 'trunc' function:
var x = 6.5
x.round(.towardZero)
// x == 6.0

// Equivalent to the C 'ceil' function:
var y = 6.5
y.round(.up)
// y == 7.0

// Equivalent to the C 'floor' function:
var z = 6.5
z.round(.down)
// z == 6.0

解決策2

extension Numeric {

    private func _precision(number: NSNumber, formatter: NumberFormatter) -> Self? {
        if  let formatedNumString = formatter.string(from: number),
            let formatedNum = formatter.number(from: formatedNumString) {
                return formatedNum as? Self
        }
        return nil
    }

    private func toNSNumber() -> NSNumber? {
        if let num = self as? NSNumber { return num }
        guard let string = self as? String, let double = Double(string) else { return nil }
        return NSNumber(value: double)
    }

    func precision(_ minimumFractionDigits: Int,
                   roundingMode: NumberFormatter.RoundingMode = NumberFormatter.RoundingMode.halfUp) -> Self? {
        guard let number = toNSNumber() else { return nil }
        let formatter = NumberFormatter()
        formatter.minimumFractionDigits = minimumFractionDigits
        formatter.roundingMode = roundingMode
        return _precision(number: number, formatter: formatter)
    }

    func precision(with numberFormatter: NumberFormatter) -> String? {
        guard let number = toNSNumber() else { return nil }
        return numberFormatter.string(from: number)
    }
}

使用法

_ = 123.44.precision(2)
_ = 123.44.precision(3, roundingMode: .up)

let numberFormatter = NumberFormatter()
numberFormatter.minimumFractionDigits = 1
numberFormatter.groupingSeparator = " "
let num = 222.3333
_ = num.precision(2)

完全なサンプル

func option1<T: Numeric>(value: T, numerFormatter: NumberFormatter? = nil) {
    print("Type: \(type(of: value))")
    print("Original Value: \(value)")
    let value1 = value.precision(2)
    print("value1 = \(value1 != nil ? "\(value1!)" : "nil")")
    let value2 = value.precision(5)
    print("value2 = \(value2 != nil ? "\(value2!)" : "nil")")
    if let value1 = value1, let value2 = value2 {
        print("value1 + value2 = \(value1 + value2)")
    }
    print("")
}

func option2<T: Numeric>(value: T, numberFormatter: NumberFormatter) {
    print("Type: \(type(of: value))")
    print("Original Value: \(value)")
    let value1 = value.precision(with: numberFormatter)
    print("formated value = \(value1 != nil ? "\(value1!)" : "nil")\n")
}

func test(with double: Double) {
    print("===========================\nTest with: \(double)\n")
    let float = Float(double)
    let float32 = Float32(double)
    let float64 = Float64(double)
    let float80 = Float80(double)
    let cgfloat = CGFloat(double)

    // Exapmle 1
    print("-- Option1\n")
    option1(value: double)
    option1(value: float)
    option1(value: float32)
    option1(value: float64)
    option1(value: float80)
    option1(value: cgfloat)

    // Exapmle 2

    let numberFormatter = NumberFormatter()
    numberFormatter.formatterBehavior = .behavior10_4
    numberFormatter.minimumIntegerDigits = 1
    numberFormatter.minimumFractionDigits = 4
    numberFormatter.maximumFractionDigits = 9
    numberFormatter.usesGroupingSeparator = true
    numberFormatter.groupingSeparator = " "
    numberFormatter.groupingSize = 3

    print("-- Option 2\n")
    option2(value: double, numberFormatter: numberFormatter)
    option2(value: float, numberFormatter: numberFormatter)
    option2(value: float32, numberFormatter: numberFormatter)
    option2(value: float64, numberFormatter: numberFormatter)
    option2(value: float80, numberFormatter: numberFormatter)
    option2(value: cgfloat, numberFormatter: numberFormatter)
}

test(with: 123.22)
test(with: 1234567890987654321.0987654321)

出力

===========================
Test with: 123.22

-- Option1

Type: Double
Original Value: 123.22
value1 = 123.22
value2 = 123.22
value1 + value2 = 246.44

Type: Float
Original Value: 123.22
value1 = nil
value2 = nil

Type: Float
Original Value: 123.22
value1 = nil
value2 = nil

Type: Double
Original Value: 123.22
value1 = 123.22
value2 = 123.22
value1 + value2 = 246.44

Type: Float80
Original Value: 123.21999999999999886
value1 = nil
value2 = nil

Type: CGFloat
Original Value: 123.22
value1 = 123.22
value2 = 123.22
value1 + value2 = 246.44

-- Option 2

Type: Double
Original Value: 123.22
formatted value = 123.2200

Type: Float
Original Value: 123.22
formatted value = 123.220001221

Type: Float
Original Value: 123.22
formatted value = 123.220001221

Type: Double
Original Value: 123.22
formatted value = 123.2200

Type: Float80
Original Value: 123.21999999999999886
formatted value = nil

Type: CGFloat
Original Value: 123.22
formatted value = 123.2200

===========================
Test with: 1.2345678909876544e+18

-- Option1

Type: Double
Original Value: 1.2345678909876544e+18
value1 = 1.23456789098765e+18
value2 = 1.23456789098765e+18
value1 + value2 = 2.4691357819753e+18

Type: Float
Original Value: 1.234568e+18
value1 = nil
value2 = nil

Type: Float
Original Value: 1.234568e+18
value1 = nil
value2 = nil

Type: Double
Original Value: 1.2345678909876544e+18
value1 = 1.23456789098765e+18
value2 = 1.23456789098765e+18
value1 + value2 = 2.4691357819753e+18

Type: Float80
Original Value: 1234567890987654400.0
value1 = nil
value2 = nil

Type: CGFloat
Original Value: 1.2345678909876544e+18
value1 = 1.23456789098765e+18
value2 = 1.23456789098765e+18
value1 + value2 = 2.4691357819753e+18

-- Option 2

Type: Double
Original Value: 1.2345678909876544e+18
formatted value = 1 234 567 890 987 650 000.0000

Type: Float
Original Value: 1.234568e+18
formatted value = 1 234 567 939 550 610 000.0000

Type: Float
Original Value: 1.234568e+18
formatted value = 1 234 567 939 550 610 000.0000

Type: Double
Original Value: 1.2345678909876544e+18
formatted value = 1 234 567 890 987 650 000.0000

Type: Float80
Original Value: 1234567890987654400.0
formatted value = nil

Type: CGFloat
Original Value: 1.2345678909876544e+18
formatted value = 1 234 567 890 987 650 000.0000

4
extension Double {
  func formatWithDecimalPlaces(decimalPlaces: Int) -> Double {
     let formattedString = NSString(format: "%.\(decimalPlaces)f", self) as String
     return Double(formattedString)!
     }
 }

 1.3333.formatWithDecimalPlaces(2)

3

これまでに最も多くの票を獲得した回答はNSStringメソッドに依存しており、Foundationをインポートする必要があります。

それをやった、しかし、あなたはまだのNSLogへのアクセス権を持っています。

したがって、SwiftでNSLogを引き続き使用する方法を尋ねている場合の質問への答えは単純です:

import Foundation


3
//It will more help, by specify how much decimal Point you want.
let decimalPoint = 2
let floatAmount = 1.10001
let amountValue = String(format: "%0.*f", decimalPoint, floatAmount)

2

ここで「純粋な」迅速なソリューション

 var d = 1.234567
operator infix ~> {}
@infix func ~> (left: Double, right: Int) -> String {
    if right == 0 {
        return "\(Int(left))"
    }
    var k = 1.0
    for i in 1..right+1 {
        k = 10.0 * k
    }
    let n = Double(Int(left*k)) / Double(k)
    return "\(n)"
}
println("\(d~>2)")
println("\(d~>1)")
println("\(d~>0)")

2

拡張の力

extension Double {
    var asNumber:String {
        if self >= 0 {
            var formatter = NSNumberFormatter()
            formatter.numberStyle = .NoStyle
            formatter.percentSymbol = ""
            formatter.maximumFractionDigits = 1
            return "\(formatter.stringFromNumber(self)!)"
        }
        return ""
    }
}

let velocity:Float = 12.32982342034

println("The velocity is \(velocity.toNumber)")

出力:速度は12.3です


2

タイピング方法を減らす:

func fprint(format: String, _ args: CVarArgType...) {
    print(NSString(format: format, arguments: getVaList(args)))
}

1

この方法で演算子を作成することもできます

operator infix <- {}

func <- (format: String, args:[CVarArg]) -> String {
    return String(format: format, arguments: args)
}

let str = "%d %.1f" <- [1453, 1.123]

1

また、丸めあり:

extension Float
{
    func format(f: String) -> String
    {
        return NSString(format: "%\(f)f", self)
    }
    mutating func roundTo(f: String)
    {
        self = NSString(format: "%\(f)f", self).floatValue
    }
}

extension Double
{
    func format(f: String) -> String
    {
        return NSString(format: "%\(f)f", self)
    }
    mutating func roundTo(f: String)
    {
        self = NSString(format: "%\(f)f", self).doubleValue
    }
}

x = 0.90695652173913
x.roundTo(".2")
println(x) //0.91

1

以下の方法を使用

let output = String.localizedStringWithFormat(" %.02f %.02f %.02f", r, g, b)

println(output)

1

Swift 2.1用に更新されたVincent Guerciのruby / python%演算子のバージョン:

func %(format:String, args:[CVarArgType]) -> String {
  return String(format:format, arguments:args)
}

"Hello %@, This is pi : %.2f" % ["World", M_PI]

1

上記の良い答えはたくさんありますが、パターンは "%.3f"のようなゴブルディグックよりも適切な場合があります。これがSwift 3でNumberFormatterを使用する私の見解です。

extension Double {
  func format(_ pattern: String) -> String {
    let formatter = NumberFormatter()
    formatter.format = pattern
    return formatter.string(from: NSNumber(value: self))!
  }    
}

let n1 = 0.350, n2 = 0.355
print(n1.format("0.00#")) // 0.35
print(n2.format("0.00#")) // 0.355

ここでは、小数点以下2桁が常に表示されるようにしたかったのですが、3桁目がゼロでない場合に限ります。


1

Swift 4 Xcode 10アップデート

extension Double {
    var asNumber:String {
        if self >= 0 {
            let formatter = NumberFormatter()
            formatter.numberStyle = .none
            formatter.percentSymbol = ""
            formatter.maximumFractionDigits = 2
            return "\(formatter.string(from: NSNumber(value: self)) ?? "")"
        }
        return ""
    }
}

1

DoubleおよびCGFloat型の拡張についてはどうですか?

extension Double {

   func formatted(_ decimalPlaces: Int?) -> String {
      let theDecimalPlaces : Int
      if decimalPlaces != nil {
         theDecimalPlaces = decimalPlaces!
      }
      else {
         theDecimalPlaces = 2
      }
      let theNumberFormatter = NumberFormatter()
      theNumberFormatter.formatterBehavior = .behavior10_4
      theNumberFormatter.minimumIntegerDigits = 1
      theNumberFormatter.minimumFractionDigits = 1
      theNumberFormatter.maximumFractionDigits = theDecimalPlaces
      theNumberFormatter.usesGroupingSeparator = true
      theNumberFormatter.groupingSeparator = " "
      theNumberFormatter.groupingSize = 3

      if let theResult = theNumberFormatter.string(from: NSNumber(value:self)) {
         return theResult
      }
      else {
         return "\(self)"
      }
   }
}

使用法:

let aNumber: Double = 112465848348508.458758344
Swift.print("The number: \(aNumber.formatted(2))")

プリント:112 465 848 348 508.46


0
@infix func ^(left:Double, right: Int) -> NSNumber {
    let nf = NSNumberFormatter()
    nf.maximumSignificantDigits = Int(right)
    return  nf.numberFromString(nf.stringFromNumber(left))
}


let r = 0.52264
let g = 0.22643
let b = 0.94837

println("this is a color: \(r^3) \(g^3) \(b^3)")

// this is a color: 0.523 0.226 0.948

0

小数点以下2桁についてはわかりませんが、小数点以下0桁の浮動小数点を印刷する方法は次のとおりです。したがって、2桁、3桁になる可能性があると思います(注:渡すにはCGFloatをDoubleに変換する必要あります)String(format :)、またはゼロの値が表示されます)

func logRect(r: CGRect, _ title: String = "") {
    println(String(format: "[ (%.0f, %.0f), (%.0f, %.0f) ] %@",
        Double(r.origin.x), Double(r.origin.y), Double(r.size.width), Double(r.size.height), title))
}

0

Swift2の例:小数を削除してFloatをフォーマットするiOSデバイスの画面幅

print(NSString(format: "Screen width = %.0f pixels", CGRectGetWidth(self.view.frame)))

-1

@Christian Dietrich:

の代わりに:

var k = 1.0
    for i in 1...right+1 {
        k = 10.0 * k
    }
let n = Double(Int(left*k)) / Double(k)
return "\(n)"

それはまたかもしれない:

let k = pow(10.0, Double(right))
let n = Double(Int(left*k)) / k
return "\(n)"

[修正:] 混乱して申し訳ありません*-もちろん、これはダブルスで機能します。私は、最も実用的だと思います(数字を切り捨てずに丸めたい場合)は、次のようになります。

infix operator ~> {}
func ~> (left: Double, right: Int) -> Double {
    if right <= 0 {
        return round(left)
    }
    let k = pow(10.0, Double(right))
    return round(left*k) / k
}

Floatの場合のみ、DoubleをFloatに置き換え、powfをpowfに、roundをroundfに置き換えるだけです。
更新: Stringの代わりに戻り型Doubleを使用するのが最も実用的であることがわかりました。文字列出力でも同じように機能します。

println("Pi is roughly \(3.1415926 ~> 3)")

prints:Piはおおよそ3.142
なので、文字列と同じように使用できます(ただし、println(d〜> 2)と書くこともできます)。ただし、値を直接丸めるために使用することもできます:

d = Double(slider.value) ~> 2

または必要なものは何でも…


これは明らかにコメントを意図したものであり、私はあなたが主張するためにもっとスペースが必要であると理解しています、そしてそれは価値がありますが、あなたがそれを完全な答えとして書くつもりなら、それ自体、単独でそれを有用にします; たとえば、完全なコードを追加してから、クリスチャンに発言して承認することができます。
JaimeGómez2015

@ハイメ・ゴメス:私は上の答えにコメントすることはできません。しかし、とにかく、私はその中にいくつかの誤った解釈*がありました。保持する価値があるか、削除する必要があるかは不明です。もちろん、これは丸め(文字列変換なし)と同じように使用でき、他のプログラミング言語に簡単に変換できます。 * Doubleでは、8桁程度に丸められると想定しましたが、Floatで丸めて誤ってDoubleに変換してしまったため、これはもちろんエラーでした。
Stuepfnick 2015

PS:(?&定期的な方法で)私は戻り値の型ダブルので、より一般的ではなく、文字列の出力に丸め同様の方法を使用することを好むだろう追記:あなたはフロートそのように(つまり、スライダーから)と文字列、それに結果を丸める場合「0.1」のように問題ありませんが、そのFloatをDoubleに変換してからString *に変換すると、「0.100000001490116」になります。Floatは0.1を正確に格納することができないため、非常に近い値しか格納できません。私はそれだけで、ダブルと同じだと思う倍精度 ;)だから、常に Doubleに変換する前に、それはあまりにとして正確な可能性と文字列の罰金に変換ようになりますので、丸め。
Stuepfnick 2015年

PPS:もちろん、戻り値の型がDoubleの場合、少し異なる場合があります。つまり、ラベルテキストを設定する必要がある場合は、myLabel.text = "\(d〜> 2)"の代わりにmyLabelと記述する必要があります。 text = d〜> 2ですが、関数はその方が実用的です。(もちろん、誰もができること、彼らが望むこと、私の考えだけ...)
Stuepfnick

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