我已经呆了几个小时,如果我遗漏了一些明显的东西,请原谅我。
我正在使用pow(_ x: Decimal, _ y: Int) -> Decimal
函数来使用基本公式来帮助产生每月付款金额。我已经将此函数链接到infix operator
***
,但是我尝试通过仅键入该函数来使用它,并且遇到了同样的问题。
Xcode昨天因为对公式的使用时间太长而大吼大叫,所以我将其分解为几个常数,并将其合并到所需的整体公式中。
代码:
precedencegroup PowerPrecedence { higherThan: MultiplicationPrecedence }
infix operator *** : PowerPrecedence
func *** (radix: Decimal, power: Int) -> Decimal {
return (pow((radix), (power)))
}
func calculateMonthlyPayment() {
let rateAndMonths: Decimal = ((0.0199 / 12.0) + (0.0199 / 12.0))
let rateTwo: Decimal = ((1.0+(0.0199 / 12.0)))
loan12YearsPayment[0] = ((rateAndMonths / rateTwo) *** 144 - 1.0) * ((values.installedSystemCost + loanFees12YearsCombined[0]) * 0.7)
当我打印到控制台或在模拟器中运行它时,输出为NaN
。我知道pow
函数本身可以正常工作,因为我已经使用随机整数对其进行了尝试。
请就此Apple函数实现找到我的观点,请注意以下示例:
pow(1 as Decimal, -2) // 1; (1 ^ Any number) = 1 pow(10 as Decimal, -2) // NAN pow(0.1 as Decimal, -2) // 100 pow(0.01 as Decimal, -2) // 10000 pow(1.5 as Decimal, -2) // NAN pow(0.5 as Decimal, -2) // NAN
似乎,带有十进制的pow除了10个基数,不考虑任何浮点数。所以它处理:
0.1 ^ -2 ==(1/10)^ -2 == 10 ^ 2 //正确计算,以10为基数10、100、1000,...
1.5 ^ -2 ==(3/2)^ -2 //(3/2)是一个浮点数,因此将其视为Double而不是小数,返回NAN。
0.5 ^ -2 ==(1/2)^ -2 //(2)不是10的基数,因此按原样被视为(1/2),它也是一个浮点数。返回NAN。