如何使用swift格式化double的字符串? 我正在制作像iOS上的基本计算器一样的计算器,我需要一个解决方案,根据点后面的字符数(总共不超过9位)更改显示的结果。
Example Table
|result | wished displayed result | current displayed result
| | |
|1.034 | 1.034 | 1.03
|1.000567 | 1.000567 | 1.00
|1.2 | 1.2 | 1.20
使用此代码:
result.text = String(format: "%.2f", displayNumber)
如果我得到1.000334,那么它只显示1.00
修改
我忘了说我不需要超过最多9个字符,包括点数。如果我删除%.2f
我没有得到所需的结果,因为如果我得到1.323429249430003442,结果显示的结果将是1.323429249430003442,包含许多数字(不得超过9位,包括该点),否则添加%.9f
是不好的,因为如果我得到1.32,结果显示的结果将是1.32000000,有很多不必要的零。
提前谢谢大家
编辑2(已解决):
如果有人将来服务,我就这样解决了:
var decimalNumberAsString = "\(resultNumber - floor(resultNumber))"
var decimalTrim: NSArray = decimalNumberAsString.componentsSeparatedByString(".")
numberOfDecimalPlaces = decimalTrim.objectAtIndex(1).length
if numberOfDecimalPlaces < 8 {
numberOfDecimalPlaces = decimalTrim.objectAtIndex(1).length + 1
}
else {
numberOfDecimalPlaces = 7
}
result.text = String(format: "%.\(numberOfDecimalPlaces)G", resultNumber)
答案 0 :(得分:1)
这是因为您使用的是%.2f
。删除所有浮动格式。它应该解决你的问题。
编辑 回复评论......
或者,如果您担心长度较长,请格式化为您想要的精度。假设您需要8的精度,比如说%.8f
。
答案 1 :(得分:0)
我省略了这样的显示限制: 导入基金会
extension String {
func numberLongAsDisplay() -> String {
let digitsToDisplay = 9
let formatter = NumberFormatter()
let number = NSNumber.init( value: Double(self)!)
let digitsBeforeDot = (self.components(separatedBy: ".").first)!.count
// let digitsAfterDot = (self.components(separatedBy: ".").last)!.count
formatter.minimumFractionDigits = 0
if digitsBeforeDot >= digitsToDisplay {
formatter.maximumFractionDigits = 0
} else {
formatter.maximumFractionDigits = digitsToDisplay - digitsBeforeDot
}
return String(formatter.string(from: number) ?? "")
}
}
使用示例:print ("88881.0567800111112234".numberLongAsDisplay())
\\result: 88881.0568
还删除了不必要的零。