我正在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'实际上并不是货币,所以只解决了舍入和小数位。
如何修改上述内容,以便考虑使用和/或不使用货币的字段。希望不再重新复制代码?
再次感谢所有快速回复。
谢
答案 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,您也可以添加逗号