退休時每月能領多少錢?——養老金計算程式
阿新 • • 發佈:2019-01-22
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.總結
少年們,考公務員吧!