快速将双精度转换为 Int64

Posted

技术标签:

【中文标题】快速将双精度转换为 Int64【英文标题】:Convert double to Int64 in swift 【发布时间】:2015-02-27 04:54:15 【问题描述】:

我是 swift 的初学者。我只是想写一个程序来打印第 n 个素数,但是在将 sqrt 函数转换为 int 时遇到了一些麻烦。下面是与 c/c++ 配合使用的代码。

func nthPrime(n: Int64)
    
        var i:Int64=4,j:Int64=0, prime:Int64=0
        var count:Int64=0

        while count != n
        

            for (j=2 ; j < Int64((sqrt(i))) + 1 ; j++) //Shows error cant invoke init with argument list of type (@lvalue Int64,$T9)
            
                if(i%j == 0)
                
                    i++
                    break
                
                else if(j == Int64(sqrt(i)))
                
                    count++
                    i++
                
            


        

        println("\(n)th prime is \(prime)")
    

是否可以快速进行这种比较?我知道如果我将 var i 和 j 更改为 Double 它将消除错误,但代码将无法正常工作。任何其他建议

【问题讨论】:

【参考方案1】:

sqrt 方法的入参需要为 Double。因此,您需要将其转换为 Double。您还需要使用名为 ceil 的数学方法。

在数学和计算机科学中,地板和天花板函数 将实数映射到最大的前面或最小的后面 整数,分别。

它会产生一个 Double,所以你需要再次将结果转换回 Integer。尝试像这样使用它:

Int(ceil(sqrt(Double(i))))

//

extension Int 
    var isPrime:Bool
        if self <  2  return false 
        let squareRoot = Int(sqrt(Double(self)))
        if squareRoot * squareRoot == self  return false 
        for i in 2..<Int(ceil(sqrt(Double(self)))) 
            if self % i == 0  return false 
        
        return true
    

//

1.isPrime   // false
2.isPrime   // true
3.isPrime   // true
4.isPrime   // false
5.isPrime   // true
6.isPrime   // false
7.isPrime   // true
8.isPrime   // false
9.isPrime   // false
10.isPrime   // false
11.isPrime   // true

//

let myInt = 7

if myInt.isPrime 
    // do this
 else 
    // do that

//

var twoDigitsPrimeNumbers:[Int] = []
for number in 1..<100 
    if number.isPrime 
        twoDigitsPrimeNumbers.append(number)
    

println(twoDigitsPrimeNumbers.description)  // [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

func nthPrime(nth:Int)-> Int 
    var primeCounter = 0
    var number = 2
    while true 
        if number.isPrime 
            primeCounter++
            if nth == primeCounter  return number
        
        number++
    

nthPrime(1000)   // 7,919

【讨论】:

以上是关于快速将双精度转换为 Int64的主要内容,如果未能解决你的问题,请参考以下文章

如何将双精度数组转换为 JS 数组?

将双精度转换为字符串

可可 - 将双精度转换为字符串

将双精度转换为字符数组 C++

将双精度转换为双精度,带一位小数和一位小数?

Java:将双精度数转换为字符串