退休时每月能领多少钱?——养老金计算程序

转载请保留此信息:http://blog.csdn.net/jmppok/article/details/17303243


1.养老金问题

最近养老金很火:什么?养老金不够用了,要延迟退休!

大家每个月都要缴纳一大笔养老保险金,个人+单位可能有几千块。我不禁会想:现在每个月缴这么多钱,以后等我退休了,一个月能能拿到多少呢?

当然这个问题目前还是个谜。说到底到时候可能还是国家说了算,给你发多少就是多少。


可是最为一个吊丝程序员,对该问题却十分关注。下面试图通过一个小程序来模拟算一下,一个中国人一生需要缴纳多少养老金,以及退休后,每个月能领到多少钱?


2.几个重要的设定

1)每个人缴纳数是随工资增长的,但是也有一个高限(上一年本市平均工资的3倍的28%),当然平均工资也是会随年增长的。

     设定一:我以GDP的增长速度来代替平均工资的增长速度,并且设定为7%。

2)大家都知道养老金是退休了以后才能领取的,没退休之前,钱是存在银行的,而这时候是要算利息的。

     设定二:取目前5年期的定存利率作为计算利率, 目前为4.75%


3.能领多少钱?

1)假设25岁工作,工作时工资为8000元,每个月个人+单位缴养老金1920元。60岁退休,90岁Over,领30年养老金。则情况如下:


到时每月领取46358元。

2)如果延迟至65岁退休,则情况如下:


到时每月领取79972元。(多缴了5年,少领了5年)

3)比如我是工作4年,今年30,现在缴4200左右,估计到时候65退休。情况如下:

到时每月领108936元。好多阿....


4.先不要太开心,退休时,30年过去了,那时候的物价...

假设GDP增速7%,CPI增速3%

退休时每月能领多少钱?——养老金计算程序

30年后,10000元增长17倍,退休的时候每月拿10W元,才相当于现在的6000元。


5.实现代码

Python2.7

1)养老金计算代码,c1.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

#月缴纳金额(个人+单位)
Money_now = 0
#退休后月领取金额
Money_retire = 0
#参加工作年龄,预定义为22
Age_work = 25
#现在年龄(输入)
Age_now = 0
#退休年龄,预定义为60
Age_retire = 65
#死亡年龄,预定义为90
Age_die = 90
#银行利息,用于计算养老金利息
Bank_rate=0.0475
#GDP增长,用于计算每月养老金的增加金额
GDP_rate=0.07

#计算分为两步:
#1.计算总缴纳,包括以前缴的和以后缴的,每年计息;
#2.计算月领取数,领取时余额每年计息;
def calc(age,money):
	Age_now=int(age)
	Money_now=int(money)
	
	Y_before= Age_now-Age_work
	Y_total = Age_retire - Age_work
	
	M_first = Money_now*(1-GDP_rate)**Y_before
	
	R_gdp = 1+GDP_rate;
	R_bank = 1+Bank_rate;

	#计算总缴纳额
	#  Y_total-1
	#SUM=∑(M_first*12*(R_gdp)**k)*(R_bank)**(Y_total-k) 
     #  k=0
	#即
	#  Y_total-1
	#SUM=∑(12*M_first*(R_bank)**Y_total)*(R_gdp/R_bank)**(k) 
     #  k=0
	#使用等比数列求和 Sn=a1(1-q^n)/(1-q)
	q=R_gdp/R_bank
	SUM=12*M_first*((R_bank)**(Y_total))*(1-q**Y_total)/(1-q)
	print Age_work,"参加工作,",Age_retire,"退休","退休时有养老金",SUM
	
	#下面计算领取
	Y_draw=Age_die-Age_retire
	# 假设刚好领完,每年计息
	#  Y_draw-1
	#  ∑(SUM-Money_retire*12*k)*(R_bank)**(Y_draw-k)=12*Money_retire*Y_draw 
    #  k=0
	
	#Y=12Money_retire
	#M=(R^(n+1)-(n+1)R+n)/(R^n*(R-1)^2)
        #Y=(S*(R^N-1))/((R-1)*(R^n*M+N))
	
	M=(R_bank**(Y_draw+1)-(Y_draw+1)*R_bank+Y_draw)/(R_bank**Y_draw * (R_bank-1)**2)
	Y=(SUM*(R_bank**Y_draw-1))/((R_bank-1)*(R_bank**Y_draw*M+Y_draw))
	Money_retire = Y/12
	print Age_die,"死亡,领取",Y_draw,"年,每月",Money_retire

if __name__=='__main__':
	if(len(sys.argv)<3):
		print "Usage: c.py age money"
	else:
		calc(sys.argv[1],sys.argv[2])

代码分析:主要是两个数学计算公式。

a.缴费计算 

#  Y_total-1
#SUM=∑(M_first*12*(R_gdp)**k)*(R_bank)**(Y_total-k) 
#  k=0
b.领取计算

#  Y_draw-1
#  ∑(SUM-Money_retire*12*k)*(R_bank)**(Y_draw-k)=12*Money_retire*Y_draw 
#  k=0

2)物价上涨计算代码

#!/usr/bin/python
# -*- coding: utf-8 -*-
GDP_rate=0.07
CPI_rate=0.03
i=5
while(i<65):
	print "10000, ",i," Years late : ",10000*(1+GDP_rate+CPI_rate)**i
	i+=5


欢迎大家批评指正!


6.总结

少年们,考公务员吧!



你可能感兴趣的:(python,养老金计算,退休后每月领多少钱)