Go语言使用map实现债务分期计算首月还款额为0问题排查
问题根因
代码的核心问题是变量赋值和使用的顺序颠倒了:
- 你在循环起始就声明了map变量,此时
pay还未计算当期值,第一次循环时pay还是int类型的默认零值0 - 后续你计算出了新的
pay值,但并没有更新到已经创建好的map中,打印时取的还是map里存储的旧值,所以首月输出为0,后面的月份输出的都是上一期的还款额。
另外补充一个逻辑隐患:你当前的利息计算是每期都按全额债务计息,如果你实际需要的是按剩余未还本金计息,可以再调整计算规则,当前计息逻辑和你描述的需求一致的话可以保留。
修复后代码
package main import "fmt" func main() { fmt.Print("Input the debt value : ") var debt int fmt.Scanln(&debt) fmt.Print("Input how long the installments : ") var installment int fmt.Scanln(&installment) fmt.Println("====================================================") fmt.Println("Total debt : ", debt) fmt.Println("Installments : ", installment) fmt.Println("====================================================") var firstHalf = installment / 2 var pay int for i := 1; i <= installment; i++ { // 先计算当期还款额 if i <= firstHalf { pay = (debt / installment) + (debt * 11 / 100) } else { pay = (debt / installment) + (debt * 8 / 100) } // 计算完成后再存入map,满足map使用要求 value := map[string]int{ "month": i, "payment": pay, } // 打印map中的最新值 if i <= firstHalf { fmt.Println(value["month"],"Installment with bank interest (11%) is", value["payment"]) } else { fmt.Println(value["month"],"Installment with bank interest (8%) is", value["payment"]) } } }
验证结果
输入债务10000000、分期时长7个月时,首月还款额会正常显示为10000000/7 + 10000000*11%的取整结果,不会再出现0值。
内容的提问来源于stack exchange,提问作者Iseca
相关产品推荐
相关产品推荐

