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

时间:2015-04-01 15:50:01

标签: swift

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

这很好用。但是,如果结果小于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)

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

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

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

再次感谢所有快速回复。

5 个答案:

答案 0 :(得分:15)

let b = 2.1
println(String(format:"%.02f", b))

在我的操场上给出字符串“2.10”。

答案 1 :(得分:10)

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

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

示例:

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

请注意,为您完成了舍入。

答案 2 :(得分:2)

也许您正在寻找NSNumberFormatter

let nf = NSNumberFormatter()
nf.minimumFractionDigits = 2
nf.stringFromNumber(enteredOddsRounded)

答案 3 :(得分:1)

扩展设置最小分数:

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

答案 4 :(得分:0)

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

这是我在某些情况下使用的

还可以选择使用NSNumberFormatter,您也可以添加逗号

这是一个教程 http://nshipster.com/nsformatter/