作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
基本上,我有一个Float
,例如:3.511054256。
如何提取小数点后的 n
位数?
即我想检索 0.51、0.511、0.5110 等。
我知道我可以轻松实现这样的目标:
var temp: Float = 3.511054256
var aStr = String(format: "%f", temp)
var arr: [AnyObject] = aStr.componentsSeparatedByString(".")
var tempInt: Int = Int(arr.last as! String)!
但是,这给了我 511054
。我想要轻松检索小数点后任意位数的选项。
对于我正在执行的任务,我只需要检索小数点后的前 2 位数字,但限制越少越好。
谢谢。
最佳答案
您可以在格式说明符中指定小数位数,比如 N
,如 %.Nf
,例如 5
decimal数字,%.5f
.
let temp: Float = 3.511054256
let aStr = String(format: "%.5f", temp).componentsSeparatedByString(".").last ?? "Unexpected"
print(aStr) // 51105
或者,为了更动态的使用,使用 NSNumberFormatter
:
/* Use NSNumberFormatter to extract specific number
of decimal digits from your float */
func getFractionDigitsFrom(num: Float, inout withFormatter f: NSNumberFormatter,
forNumDigits numDigits: Int) -> String {
f.maximumFractionDigits = numDigits
f.minimumFractionDigits = numDigits
let localeDecSep = f.decimalSeparator
return f.stringFromNumber(num)?.componentsSeparatedByString(localeDecSep).last ?? "Unexpected"
}
/* Example usage */
var temp: Float = 3.511054256
var formatter = NSNumberFormatter()
let aStr = getFractionDigitsFrom(temp, withFormatter: &formatter, forNumDigits: 5)
print(aStr) // 51105
请注意,上述两种解决方案都会执行舍入;例如,如果 var temp: Float = 3.519
,则要求 2
十进制数字将产生 “52”
。如果你真的打算把你的 float temp
纯粹当作一个 String
(没有任何舍入),你可以只使用 String
方法来解决这个问题,例如
/* Just treat input as a string with known format rather than a number */
func getFractionDigitsFrom(num: Float, forNumDigits numDigits: Int) -> String {
guard let foo = String(temp).componentsSeparatedByString(".").last
where foo.characters.count >= numDigits else {
return "Invalid input" // or return nil, for '-> String?' return
}
return foo.substringWithRange(foo.startIndex..<foo.startIndex.advancedBy(numDigits))
}
/* Example usage */
let temp: Float = 3.5199
let aStr = getFractionDigitsFrom(temp, forNumDigits: 2) // 51
关于ios - 如何在 Swift 中提取 Float 小数点后的任意数字并将其转换为 String?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35910707/
我是一名优秀的程序员,十分优秀!