gpt4 book ai didi

ios - 如何在 Swift 中提取 Float 小数点后的任意数字并将其转换为 String?

转载 作者:搜寻专家 更新时间:2023-11-01 06:19:52 25 4
gpt4 key购买 nike

基本上,我有一个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com