- ベストアンサー
小数点表示についてアドバイスをください。
for(i = 0 ; lstNobiRitu.length > i ; i ++ ){ ///数値以外なら伸び率を0にする lstNobiRitu[i].value = Num_Comp(lstNobiRitu[i].value); if(lstNobiRitu[i].value == ""){ lstNobiRitu[i].value = 0; ////条件によって伸び率を0にする if(lstNobiRitu[i].value == ""){ lstNobiRitu[i].value = 0; }else{ lstNobiRitu[i].value = Math.floor(lstNobiRitu[i].value * 10) / 10; } } function Num_Comp(inStr){ var strMatch = inStr.match(/[0-9]/g); var rtnMatch = ""; try{ for (s=0; s < strMatch.length; s++){ rtnMatch = rtnMatch + strMatch[s]; } } catch (e) {} return rtnMatch; } この様に伸び率を求めるメソッドを記述しました。 今の動きとしてテキストボックスに12と入力すれば、 12.0と表示されます。 これは、オンチェンジで動く仕組みです。 しかし、何度も繰り返すと12.0が120.0、1200.0と どんどん0が追加されていってしまいます。 それは、Num_Compで数字以外は全てスペースに変換する 仕組みになっている事が原因で計算式が起動した時、 .0がおかしく追加されてしまう今の現状があります。 ところが、Num_Compに小数点である「.」を許可してしまうと テキストボックスに「.」だけを入力できてしまう 現象が行ってしまいます。 どういう風にコーディングすればいいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ん・・・一言で言うと、構造が複雑すぎ(Javaの文法(?)に縛られすぎ)だからではないかと。 for(var i=0; lstNobiRitu.length>i; i++){ lstNobiRitu[i].value = Num_Comp(lstNobiRitu[i].value); } function Num_Comp(inStr){ if(isNaN(inStr)) return 0; //これで数値以外の構造は全て除去。 return Math.floor(inStr * 10) / 10; } コレで充分な気がしますが?
その他の回答 (1)
- Werner
- ベストアンサー率53% (395/735)
> 今の動きとしてテキストボックスに12と入力すれば、 > 12.0と表示されます。 同じようなコードを書いてみましたが、 12.0ではなく12と表示されました。 > それは、Num_Compで数字以外は全てスペースに変換する仕組みになっている事が スペースに変換ではなくて、数字以外は完全に除去されているように思えます。 まあそれは置いておくとしても 最終的にどういう風な動作を望んでいるのかがよくわからないです。 とりあえず数値かどうかを判定したいのであればisNaNを使えばよいと思いますが。