2015-04-18 2 views
2

У меня очень много кода, очень похожего на это., заставляя номер отображаться с 2 десятичными знаками с помощью swift

//Gross Total 
    var gt:Float64 = tp01 + tp02 + tp03 + tp04 + tp05 + tat + ntat 
    GrossTotal.text = "\(gt)" 

Где я показываю числа на этикетке. Этот код работает отлично. Я хотел бы знать, как заставить отображаемое число всегда иметь значение с точностью до двух знаков после запятой. Пожалуйста, используйте только быстрый код. спасибо

ответ

3

Вы можете использовать методы NSString из быстро:

GrossTotal.text = NSString(format: "%.2f", gt") as String 

EDIT: У меня было "@" перед строкой, которая является Objective-C привычки.

+0

Строка (формат: "% .2f", gt) –

+0

достаточно близко. Спасибо Это то, что на самом деле работало GrossTotal.text = NSString (формат: «% .2f», gt) как String – ElectricTiger

+1

Вам не нужно отбрасывать его в String. GrossTotal.text = String (формат: «% .2f», gt) –

3

обновление: Xcode 7.1 • Swift 2,1

Вы можете использовать NSNumberFormatter для форматирования строки по желанию и вокруг него вверх или вниз следующим образом:

extension Double { 
    struct Number { static let formatter = NSNumberFormatter() } 
    func fratcionDigitis(n: Int, roundingMode: NSNumberFormatterRoundingMode) -> String { 
     Number.formatter.roundingMode = roundingMode 
     Number.formatter.maximumFractionDigits = n 
     Number.formatter.minimumFractionDigits = n 
     return Number.formatter.stringFromNumber(self) ?? "" 
    } 
} 

let tp01 = 3.3232 
let tp02 = 1.5673 
let tp03 = 1.9764 
let tp04 = 2.0986 
let tp05 = 5.5557 
let tat = 2.7448 
let ntat = 2.2339 

let gt: Float64 = tp01 + tp02 + tp03 + tp04 + tp05 + tat + ntat // 19.4999 


let roundDown = gt.fratcionDigitis(2, roundingMode: .RoundDown) // "19.49" 
let roundUp = gt.fratcionDigitis(2, roundingMode: .RoundUp)  // "19.50" 

Или, как я уже говорил в моем комментарии вы можете просто использовать String (формат :)

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

вы можете создать довольно скользкое расширение для этого:

Использование: GrossTotal.text = gt.format(2)

Расширение:

extension Double { // Same as Float64 
    func format(f: Int) -> String { 
     return String(format: "%.\(f)f", self) 
    } 
} 

Если вы хотите сохранить значение как Float64, а не строку вы можете также добавить это к вашему расширению:

func roundTo(numDigits: Int) -> Double { 
    let power = pow(10.0, Double(numDigits)) 
    return round(self * power)/power 
} 

Использование: gt.roundTo(2), который возвращает Double/Float64 такой же тип.

+0

Ваш второй метод «сохранить значение как Float64» не имеет смысла. Отображение между десятичной плавающей точкой и двоичной плавающей точкой не является точным. Двоичные значения с плавающей запятой не имеют собственного числа десятичных знаков. 64-разрядные парные разряды достаточно высоки в точности, что они не имеют ошибок округления при преобразовании в строки, но код, который вы создали, на самом деле ничего не полезен. –