1. 程式人生 > >退休時每月能領多少錢?——養老金計算程式

退休時每月能領多少錢?——養老金計算程式

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.總結

少年們,考公務員吧!