« October 2008 | Main | December 2008 »

Saturday, November 15, 2008

住宅ローンシミュレータ改良

色々改良~.

高機能住宅ローンシミュレーション

ボーナス払いも対応したけど,結局詳細な計算式が不明.
誰かわかる人がいたら教えてください...

初回のボーナス払い月が6ヶ月目じゃない場合の計算は,ローン支払額計算方法のページを参考にさせてもらって,わりと簡単に実装できた.

とはいえ,計算の中身をよく理解していないので,途中で金利が変わったり繰上返済したときの計算は謎.
金額が多少ずれるくらいなので,概算の計算としては問題ないんだけど.うーん.
数学が苦手だとこういうとき不便...(^^;

まぁ,他のシミュレータをみても,初回支払い額は6ヶ月目想定のものばっかりだし,繰上返済とかそもそもできないのが多いし,みんなまじめに実装はしていないのかも.

----

ヘルプに関しては,新ウィンドウを立ち上げるのはブロックされることが多いので,Greyboxにしてみた.

http://orangoo.com/labs/GreyBox/

やっぱりこれがjQueryではスタンダードかな?
コンパクトなjqModalとか試してみたけど,ウィンドウ内でのスクロールができないとかやっぱり不便.
ウィンドウの外側クリックで閉じないのが不便だけど,それ以外は良くできているし,デフォルトのデザインもいい感じ.

| | Comments (0) | TrackBack (0)

Monday, November 03, 2008

jQuery ライブラリ色々

住宅ローンのシミュレータをその後色々改良したりした.
場所も http://loan.mikage.to/ へ移動

その中で jQuery のライブラリをいくつか使ってみたので,それについて.


■ グラフライブラリ Flot

http://code.google.com/p/flot/

結構綺麗なグラフを書いてくれる.
日本語もOkだし,軸のラベルなども関数を渡して好きなフォーマットにでき,使いやすい.

線・棒グラフや,2軸のグラフは描けるものの,円とか積み重ねグラフは無理.
ツールチップを出したり,ズームしたり,時間軸が特別に用意されていたりと便利なところも多いので,そこが残念なところ…

動作は結構軽い?
サーバ側で画像で生成するよりずっと楽だし,軸の表示・非表示などをJavaScriptから手軽に変更できるのが便利.

住宅ローンの簡易シミュレーションみたいに,JavaScriptで計算して,リアルタイムにグラフを更新するような使い方もできる.
(ブラウザによってはちょっと重いかも?)
Flash でも同じようなことはできると思うけど,JavaScriptの方がHTMLと親和性が良くて楽に書けるように思う.


■ 電卓 Calculator

http://keith-wood.name/calculator.html

電卓をテキストフォームに関連付けて,入力時に電卓方式で入力できるプラグイン.
四則演算なども普通に使えるので,回数を入力する場合に,12ヶ月*7年 の計算をして,その結果を反映させるとかが可能.
ボタンの配置や,ボタンのラベルなどもすべてカスタマイズできるので,日本語への置き換えも簡単.

ただ,小数の計算をすると,浮動小数点固有の誤差が出て,結果が変になってしまう問題が….
そのため,↓のライブラリを使うようにちょっと手を入れたものを利用中.


■ 高精度計算ライブラリ bigdecimal

http://stz-ida.de/html/oss/js_bigdecimal.html.en

小数の計算を誤差無し(?)に行えるライブラリ.
(でも今はなんかページが落ちている模様.キャッシュならみれます)
ブラウザによってエラーが出て動かなかったので,以下のパッチで修正.

--- a/js/bigdecimal/bigdecimal.js       Sat Oct 25 18:16:50 2008 +0900
+++ b/js/bigdecimal/bigdecimal.js       Sat Oct 25 23:47:42 2008 +0900
@@ -3893,8 +3893,9 @@
   var mag;
   //--int len=0;
   var len=0;
-  cmant=new Array(this.mant.length); // copy byte[] to a char[]
-  {var $18=this.mant.length;i=0;i:for(;$18>0;$18--,i++){
+  var mantlength = (this.mant == undefined) ? 0 : this.mant.length;
+  cmant=new Array(mantlength); // copy byte[] to a char[]
+  {var $18=mantlength;i=0;i:for(;$18>0;$18--,i++){
    cmant[i]=this.mant[i]+'';
    }
   }/*i*/

ちなみにライセンスのリンク先がよくわからなかったけども,ページによると,


In short, you may use and distribute them as you like as long as the copyright notices stay intact.

とあるので普通に使って問題ないようです.

| | Comments (0) | TrackBack (0)

« October 2008 | Main | December 2008 »