swift “pow”的模糊用法

mqxuamgl  于 2023-05-21  发布在  Swift
关注(0)|答案(2)|浏览(152)

嗨,伙计们,我试着当有人给予一秒钟,然后得到多少生活在千兆秒。所以我写了这样的代码。我必须将第二乘以10^9,但我得到了错误。“POW”的用法不明确。

func gigaSecond( second: Int)-> Int {
    
    var gigasecond : Int
    gigasecond = second * Int(pow(10, 9))
    
   return gigasecond   
}
wwtsj6pe

wwtsj6pe1#

请注意:pow()函数返回decimal值。

并且,要将这个decimal值转换为Int值,可以简单地考虑以下两个中的任何一个:

  1. Int(pow(x, y)) ...[即直接将Decimal转换为Int]
  2. Int(Double(pow(x, y))) ...[即DecimalDoubleInt的转换,一次完成]
    但是,这两种方法都会导致相同的Ambiguous use of 'pow'错误(下面的屏幕截图)。

然而,有趣的是,如果我们将第二个选项分成两行代码,即:
a)Decimal to Double,然后
B)Double to Int
...它的工作原理就像一个魅力!
下面是您想要的确切函数,而不必直接使用Int值(根据需要):

func getGigaSeconds(from seconds: Int) -> Int {

    let gigaPower: Double = pow(10, 9)
    let gigaSeconds = seconds * Int(gigaPower)

    return gigaSeconds
}

编辑:

Apple Developer文档显示,pow()函数的y参数是Int,而xreturn-type都是Decimal

结论:

以下变体可以工作:

// 1) `y` is a `Double`
let gigaSeconds = Int(pow(10, Double(9)))

// 2) `x` is a `Double`
let gigaSeconds = Int(pow(Double(10), 9))

// 3) Both, `x` and `y` are `Double`
let gigaSeconds = Int(pow(Double(10), Double(9)))

// 4) Both, `x` and `y` are `Int` but the end result is a `Double` (which is then converted to an `Int`
let gigaPower: Double = pow(10, 9)
let gigaSeconds = seconds * Int(gigaPower)
hlswsv35

hlswsv352#

使用Double

pow(10.0, 9.0)

或者直接使用Int值

func gigaSecond( second: Int)-> Int {
    return second / 1_000_000_000
}

相关问题