转载请保留此信息:http://blog.csdn.net/jmppok/article/details/17303243
最近养老金很火:什么?养老金不够用了,要延迟退休!
大家每个月都要缴纳一大笔养老保险金,个人+单位可能有几千块。我不禁会想:现在每个月缴这么多钱,以后等我退休了,一个月能能拿到多少呢?
当然这个问题目前还是个谜。说到底到时候可能还是国家说了算,给你发多少就是多少。
可是最为一个吊丝程序员,对该问题却十分关注。下面试图通过一个小程序来模拟算一下,一个中国人一生需要缴纳多少养老金,以及退休后,每个月能领到多少钱?
1)每个人缴纳数是随工资增长的,但是也有一个高限(上一年本市平均工资的3倍的28%),当然平均工资也是会随年增长的。
设定一:我以GDP的增长速度来代替平均工资的增长速度,并且设定为7%。
2)大家都知道养老金是退休了以后才能领取的,没退休之前,钱是存在银行的,而这时候是要算利息的。
设定二:取目前5年期的定存利率作为计算利率, 目前为4.75%
1)假设25岁工作,工作时工资为8000元,每个月个人+单位缴养老金1920元。60岁退休,90岁Over,领30年养老金。则情况如下:
到时每月领取46358元。
2)如果延迟至65岁退休,则情况如下:
到时每月领取79972元。(多缴了5年,少领了5年)
3)比如我是工作4年,今年30,现在缴4200左右,估计到时候65退休。情况如下:
到时每月领108936元。好多阿....
假设GDP增速7%,CPI增速3%
30年后,10000元增长17倍,退休的时候每月拿10W元,才相当于现在的6000元。
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=0b.领取计算
# 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
欢迎大家批评指正!
少年们,考公务员吧!