如何在Swift数组中筛选并仅输出平方根为整数的数值?
实现筛选平方根为整数的数值
直接用sqrt()结果判断是否为整数容易踩浮点数精度的坑——比如部分大数的平方根计算会因浮点精度丢失导致判断错误。正确的思路是:计算平方根后取整,再将该整数平方,对比是否等于原数。
数组筛选示例代码
let numbers = [1, 2, 3, 4, 5, 16, 20, 25, 30] // 过滤出平方根为整数的元素 let perfectSquares = numbers.filter { number in guard number >= 0 else { return false } // 负数无实数平方根,直接排除 let sqrtValue = sqrt(Double(number)) let roundedSqrt = Int(sqrtValue) return roundedSqrt * roundedSqrt == number } print(perfectSquares) // 输出: [1, 4, 16, 25]
单个数值判断的封装函数
如果需要单独判断某个数是否符合要求,可以封装成工具函数:
func isPerfectSquare(_ number: Int) -> Bool { guard number >= 0 else { return false } let sqrtValue = sqrt(Double(number)) let rounded = Int(sqrtValue) return rounded * rounded == number } // 调用示例 print(isPerfectSquare(25)) // true print(isPerfectSquare(20)) // false
内容的提问来源于stack exchange,提问作者Yellow_Hornet
相关产品推荐
相关产品推荐

