我已经在这几个小时了,所以如果我错过了一些明显的东西,请原谅我。
我正在使用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
函数本身正常工作,因为我已经尝试了随机整数。
答案 0 :(得分:0)
请为以下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。