如何显示2位小数,而不管swift中小数点后的位数?

fra*_*son 6 swift

我正在编写应用程序,swift并使用了以下代码.所以我的输出按预期向上舍入到小数点后2位.

这很好用.但是,如果结果小于2位小数,则仅显示1位数.这是最基本的例子,但我的结果可能是整数或10位小数.我希望他们都能表现出来.xx

1.2345 => 1.23

1.1 => 1.1
Run Code Online (Sandbox Code Playgroud)

无论小数点后的位数如何,如何使结果始终显示2位小数?

例如: 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)")
Run Code Online (Sandbox Code Playgroud)

感谢您的评论.我修改如下:

@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)
Run Code Online (Sandbox Code Playgroud)

它让我失去了很多代码,因为它为我提供了舍入和小数位,同时还包括货币作为奖励.

这已经适用于我确实需要显示货币的所有字段,上面的值'oddsLabel.text'实际上并不是货币,所以只解决了舍入和小数位.

如何修改上述内容,以便考虑使用和/或不使用货币的字段.希望不再重新复制代码?

再次感谢所有快速回复.

坦率

emr*_*s57 16

let b = 2.1
println(String(format:"%.02f", b))
Run Code Online (Sandbox Code Playgroud)

在我的操场上给出字符串"2.10".


Sul*_*han 11

你所使用的被称为"天真"的实现.它主要起作用,但它有一些小问题和一些隐藏的问题.其中一个隐藏的问题是您完全忽略用户区域设置 - 大多数欧洲语言使用逗号作为小数分隔符而不是点.

为了处理十进制数到字符串转换的问题(反之亦然),大多数编程语言都提供专用API.在Cocoa/CocoaTouch中有NSNumberFormatter.

例:

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
oddsLabel.text = formatter.stringFromNumber(enteredOdds)
Run Code Online (Sandbox Code Playgroud)

请注意,舍入是为您完成的.


Mat*_*mbo 4

也许您正在寻找NSNumberFormatter

let nf = NSNumberFormatter()
nf.minimumFractionDigits = 2
nf.stringFromNumber(enteredOddsRounded)
Run Code Online (Sandbox Code Playgroud)