duanmei1946 2012-12-06 08:37

# golang：为什么我得到+ Inf而不是整数或浮点数？

I am learning golang, working on time value of money computations

I am trying to compute for number of period to say, double your money. The formula that I am using is period = log(fv/pv) / log(1 + i). What I have so far is...

``````package main
import (
"fmt"
"math"
)
var (
interest,
futureValue,
period,
presentValue float64
)
var rate float64 = interest / 100 //converts interest into decimal... interest / 100
var ratex float64 = 1 + interest //used for (1 + i)

func main() {
numPeriod()
}
func numPeriod() {
fmt.Println("Enter interest amount: ")
fmt.Scanf("%g", &interest)
fmt.Println("Enter present value: ")
fmt.Scanf("%g", &presentValue)
fmt.Println("Enter future value: ")
fmt.Scanf("%g", &futureValue)
var logfvpvFactor float64 = futureValue / presentValue
var logi float64 = math.Log(ratex)
var logfvpv float64 = math.Log(logfvpvFactor)
period = logfvpv / logi
fmt.Printf("Number of period/s is = %g
", period)
}
``````

Running this, I get...

``````Number of period/s is = +Inf
``````

...the answer I was looking for is either an integer or a float. How do I get that?

• 写回答

#### 3条回答默认 最新

• duanbing8817 2012-12-06 14:56
关注

To expand on Diego's answer, you have the line

``````var ratex float64 = 1 + interest
``````

before interest is defined, so it is 0 and ratex becomes 1. Then you have the line

``````var logi float64 = math.Log(ratex)
``````

and since ratex is 1, and the log of 1 is 0, logi becomes 0. You then define the period by dividing by logi, which is 0, so you will get +inf.

What you should do is assign the value to ratex after you have gotten the input for what the interest is.

本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

#### 悬赏问题

• ¥15 用python如何确定子元素在父元素中的位置
• ¥15 obj文件滤除异常高程
• ¥15 用mathematicas或者matlab计算三重积分
• ¥15 Loop unrolling的runtime计算