2015-04-01 30 views
5

我正在編寫一個應用程序swift並使用了下面的代碼。所以我的輸出如預期的那樣四捨五入到小數點後兩位。如何顯示2位小數,而不管小數點後的位數是多少?

這很好。但是,如果結果小於2位小數位,它只顯示1位數字。這是最基本的例子,但我的結果可能是整數或10位小數。我希望它們都顯示爲.xx

1.2345 => 1.23 

1.1 => 1.1 

我如何得到的結果總是顯示小數點後2位,無論小數點後的位數的?

E.g:1.1 => 1.10

我已經廣泛搜查,但答案我摸不透。 這是我到目前爲止已經試過代碼:

@IBOutlet var odds: UITextField! 
@IBOutlet var oddsLabel: UILabel! 
var enteredOdds = NSString(string: odds.text).doubleValue 
var numberOfPlaces = 2.0 
var multiplier = pow(10.0, numberOfPlaces) 
var enteredOddsRounded = round(enteredOdds * multiplier)/multiplier   
oddsLabel.text = "\(enteredOddsRounded)" 
println("\(enteredOddsRounded)") 

感謝您的意見。我已經修改爲:

@IBOutlet var odds: UITextField! 
@IBOutlet var oddsLabel: UILabel! 
var enteredOdds = NSString(string: odds.text).doubleValue 

let formatter = NSNumberFormatter() 
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 

for identifier in ["en_UK", "eu_US"] { 
    formatter.locale = NSLocale(localeIdentifier: identifier) 
    formatter.minimumFractionDigits = 2 
    formatter.maximumFractionDigits = 2 
} 

oddsLabel.text = formatter.stringFromNumber(enteredOdds) 

它允許作爲它的舍入和小數,我同時還包括貨幣作爲獎金我失去了很多的代碼。

Thile這適用於我實際上需要顯示貨幣的所有字段,上面的值'oddsLabel.text'實際上並不是貨幣,因此只解決了舍入和小數位。

如何修改上述內容,以便可以考慮帶有和/或不含貨幣的字段。希望沒有再次複製代碼?

再次感謝您的所有快速回復。

弗蘭克

+0

創建一個ne w格式化程序實例爲每個字段。您不必複製,只需爲普通事物創建函數即可。 – Sulthan 2015-04-01 21:30:48

回答

1

也許你正在尋找NSNumberFormatter

let nf = NSNumberFormatter() 
nf.minimumFractionDigits = 2 
nf.stringFromNumber(enteredOddsRounded) 
10
let b = 2.1 
println(String(format:"%.02f", b)) 

給出我的操場字符串 「2.10」。

9

你用過的東西叫做「幼稚」的實現。它主要工作,但它有一些小問題和一些隱藏的問題。其中一個隱藏的問題是,你完全忽略用戶區域設置 - 大多數歐洲語言都使用逗號作爲小數點分隔符而不是點。

要處理十進制數到字符串轉換(反之亦然)的問題,大多數編程語言都提供了專用API。在Cocoa/CocoaTouch中有NSNumberFormatter

例子:

let formatter = NumberFormatter() 
formatter.numberStyle = .decimal 
formatter.minimumFractionDigits = 2 
formatter.maximumFractionDigits = 2 
oddsLabel.text = formatter.stringFromNumber(enteredOdds) 

注意四捨五入爲你做了。

+0

感謝Sulthan,我實現了這個版本,但是包括使用從John下面鏈接的貨幣區域設置。 – 2015-04-01 17:39:21

+0

真棒解決方案 – 2017-09-21 16:20:01

0
oddsLabel.text = (NSString(format:"%.2f", enteredOddsRounded)) 

這是我在某些情況下使用

也有使用NSNumberFormatter,您可以添加逗號以及

一個不錯的選擇是一個教程 http://nshipster.com/nsformatter/

+0

謝謝約翰,我用鏈接找到類似於Sulthans的零件解決方案。儘管現在我需要弄清楚如何識別輸出是貨幣還是現在。 – 2015-04-01 17:40:21

1

擴展設置最小分數位數:

extension String { 
     func setMinTailingDigits() -> String { 
      let formatter = NumberFormatter() 
      formatter.minimumFractionDigits = 2 
      return formatter.string(from: Double(self)! as NSNumber)! 
     } 
    } 
相關問題