2015-04-01 95 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)! 
     } 
    }