Javasriptの型につまずく(ローン計算)
普段、余り型を気にすることのないJavascriptですが、たまに数値を計算を行うコードを書く必要があると型を忘れてつまずくことがあります。
d3.jsでも数値データを扱うことが多いので注意が必要です。
下記はローン計算を行うExcelのRMT関数をJavascriptで実装したものですが、引数を「input typ=”text”」から取得した場合、値の型は「String」型になるのでそのまま計算するとかなり大きな誤差がでます。
このような場合は「parseInt」や「parseFloat」関数を使って型変換を行う必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//PMT関数 function pmt(rate_per_period, number_of_payments, present_value, future_value, type){ if(rate_per_period != 0.0){ var q = Math.pow(1 + rate_per_period, number_of_payments); return -(rate_per_period * (future_value + (q * present_value))) / ((-1 + q) * (1 + rate_per_period * (type))); } else if(number_of_payments != 0.0){ return -(future_value + present_value) / number_of_payments; } return 0; } window.onload = function(){ var riritsu = $('input[name=riritsu]').val(); //0.005 var kikan = $('input[name=kikan]').val(); //12 var genzai = $('input[name=genzai]').val(); //150000 var shourai = $('input[name=shourai]').val(); //0 var kigen = $('input[name=kigen]').val(); //1 //var shiharai = pmt(riritsu, kikan, genzai, shourai, kigen); //-> -747 間違い var shiharai = pmt(parseFloat(riritsu), parseFloat(kikan), parseFloat(genzai), parseFloat(shourai), parseFloat(kigen)); //-> -12846 正解 $('input[name=shiharai]').val(Math.floor(shiharai)); } |