⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monthlypmt.sh

📁 Shall高级编程
💻 SH
字号:
#!/bin/bash# monthlypmt.sh: Calculates monthly payment on a mortgage.#  This is a modification of code in the#+ "mcalc" (mortgage calculator) package,#+ by Jeff Schmidt#+ and#+ Mendel Cooper (yours truly, the author of the ABS Guide).#   http://www.ibiblio.org/pub/Linux/apps/financial/mcalc-1.6.tar.gz  [15k]echoecho "Given the principal, interest rate, and term of a mortgage,"echo "calculate the monthly payment."bottom=1.0echoecho -n "Enter principal (no commas) "read principalecho -n "Enter interest rate (percent) "  # If 12%, enter "12", not ".12".read interest_recho -n "Enter term (months) "read term interest_r=$(echo "scale=9; $interest_r/100.0" | bc) # Convert to decimal.                 #           ^^^^^^^^^^^^^^^^^  Divide by 100.                  # "scale" determines how many decimal places. interest_rate=$(echo "scale=9; $interest_r/12 + 1.0" | bc)  top=$(echo "scale=9; $principal*$interest_rate^$term" | bc)          #           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^          #           Standard formula for figuring interest. echo; echo "Please be patient. This may take a while." let "months = $term - 1"# ====================================================================  for ((x=$months; x > 0; x--)) do   bot=$(echo "scale=9; $interest_rate^$x" | bc)   bottom=$(echo "scale=9; $bottom+$bot" | bc)#  bottom = $(($bottom + $bot")) done# ==================================================================== # -------------------------------------------------------------------- #  Rick Boivie pointed out a more efficient implementation#+ of the above loop, which decreases computation time by 2/3.# for ((x=1; x <= $months; x++))# do#   bottom=$(echo "scale=9; $bottom * $interest_rate + 1" | bc)# done#  And then he came up with an even more efficient alternative,#+ one that cuts down the run time by about 95%!# bottom=`{#     echo "scale=9; bottom=$bottom; interest_rate=$interest_rate"#     for ((x=1; x <= $months; x++))#     do#          echo 'bottom = bottom * interest_rate + 1'#     done#     echo 'bottom'#     } | bc`       # Embeds a 'for loop' within command substitution.# --------------------------------------------------------------------------#  On the other hand, Frank Wang suggests:#  bottom=$(echo "scale=9; ($interest_rate^$term-1)/($interest_rate-1)" | bc)#  Because . . .#  The algorithm behind the loop#+ is actually a sum of geometric proportion series.#  The sum formula is e0(1-q^n)/(1-q),#+ where e0 is the first element and q=e(n+1)/e(n)#+ and n is the number of elements.# -------------------------------------------------------------------------- # let "payment = $top/$bottom" payment=$(echo "scale=2; $top/$bottom" | bc) # Use two decimal places for dollars and cents.  echo echo "monthly payment = \$$payment"  # Echo a dollar sign in front of amount. echo exit 0 # Exercises: #   1) Filter input to permit commas in principal amount. #   2) Filter input to permit interest to be entered as percent or decimal. #   3) If you are really ambitious, #+     expand this script to print complete amortization tables.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -