小数点も含む値の比較

このQ&Aのポイント
  • formで送信する値をOnClick時にjsで確認してから送信するプログラムを作成しています。値aと値bを比較して、bがaより大きかったらエラーを表示してfalseを返したいです。
  • 値a,bには、小数2桁まで(小数がない場合もある)が入力されます。
  • これだと結果は(if文自体の評価結果) a=1 b=1 TRUE(期待通り) a=10 b=1 FALSE(期待通り) a=10 b=2 TRUE(ダメ) a=18 b=7 TRUE(ダメ) a=18 b=17 FALSE(期待通り) a=28 b=7 TRUE(ダメ) a=28 b=2 FALSE(期待通り)という感じです。
回答を見る
  • ベストアンサー

小数点も含む値の比較

formで送信する値をOnClick時にjsで確認してから送信するプログラムを作っています。 値aと値bを比較して、bがaより大きかったらエラーを表示してfalseを返したいです。 上記の動き自体はできてるのですが、比較部分ができません。 値a,bには、小数2桁まで(小数がない場合もある)が入力されます。 function data_entry(){ if(document.test_form.a.value <= document.test_form.b.value){ alert("Bの値にA以上の値は入力できません"); return(false); } } という感じで比較したいです。 これだと結果は(if文自体の評価結果) a=1 b=1 TRUE(期待通り) a=10 b=1 FALSE(期待通り) a=10 b=2 TRUE(ダメ) a=18 b=7 TRUE(ダメ) a=18 b=17 FALSE(期待通り) a=28 b=7 TRUE(ダメ) a=28 b=2 FALSE(期待通り) という感じです。 js初心者です。 よろしくお願いしますm(__)m

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

文字列として比較していますので、一度 Number()という関数で数値型に変換してあげる必要があります。 Number(document.test_form.a.value) <= Number(document.test_form.b.value) のように。

qkyorochan
質問者

お礼

うまくいきました! ありがとうございますm(__)m

関連するQ&A

  • 見えない浮動小数点演算誤差?

    二つのBOOKにある表のデータの数値をVBAで比較していました。 単に各セルのValueとValueが等価かどうか=で比較しただけです。 すると見た目(表示)も数式バー上の値もまったく同じなのに相違があると判定されました。 不思議に思い、二つのBOOKにある表のデータの数値のうち違いがあると出た2つのセルを、そのまま別シートにコピー貼り付けして比較したのが添付の図です。 たとえば、BOOK-AからコピペしたB3セルの値は0.669です。 BOOK-BからコピペしたC3セルの値も0.669です。 両方とも数式バーでみましたが、間違いなく0.669です。 A3セルに =B3=C3 と入れるとTRUEが返ります。 ところが、D3セルに =B3-C3=0 と入れるとFALSEが返ります。 では、0でないなら差額はいくら?と、B11セルに=B3-C3と入れると、0が返ります。 これまで浮動小数点演算誤差で、見た目がおなじでも小数点以下かなり下の方で違いケースは経験していましたが、その場合でも小数点以下の表示を20位くらいまで表示させると違いが表れました。ところが今回は誤差が見えません。 差額確認のためVBAで Sub test01() Debug.Print Range("B3").Value = Range("C3").Value Debug.Print Range("B3").Value - Range("C3").Value Debug.Print Range("B5").Value = Range("C5").Value Debug.Print Range("B5").Value - Range("C5").Value End Sub としてみると、 False 1.11022302462516E-16 False 1.11022302462516E-16 が返りました。 エクセル2010と2016の2つで試しましたが同じ結果でした。 こんなことってあるんでしょうか? 困惑しています。

  • Javaで小数点第4までを処理したい。

    現在近似曲線を算出するプログラムを自作しています。 正確に算出するところまでは到達出来たのですが、最後に小数点以下が多すぎるので、小数点第四までに抑えたいです。 しかし、小数点を処理するようなプログラムを想定していなかったので、とても困惑しております。 私が作っているプログラムはこんな感じです。 <title>近似曲線プログラム</title> <body> <form name="Form1"> <font color="red">近似曲線用プログラム</font><br><br> ・X=<input type= "text" size="11" name="a"><input type= "text" size="11" name="b"><input type= "text" size="11" name="c"><br> ・Y=<input type= "text" size="11" name="e"><input type= "text" size="11" name="f"><input type= "text" size="11" name="g"><br>    <input type= "button" value= "近似曲線の数式を算出" onclick="keisan1()"><br><br> ・標本数=3<br><br> ・Xの平均値=<input type= "text" size="11" name="i"><br> ・Yの平均値=<input type= "text" size="11" name="j"><br><br> ・ΣXi<sup>2</sup>=<input type= "text" size="11" name="k"><br> ・ΣXiYi=<input type= "text" size="11" name="l"><br><br> ・a=<input type= "text" size="11" name="m"><br> ・b=<input type= "text" size="11" name="n"><br><br> 結果<br> ・y=<input type= "text" size="11" name="o">x+<input type= "text" size="11" name="p"> </form> <script language="JavaScript"> function keisan1(){ a = document.Form1.a.value-0; b = document.Form1.b.value-0; c = document.Form1.c.value-0; e = document.Form1.e.value-0; f = document.Form1.f.value-0; g = document.Form1.g.value-0; i=(a+b+c)/3; j=(e+f+g)/3; k=(a*a)+(b*b)+(c*c); l=(a*e)+(b*f)+(c*g); m=(l-3*i*j)/(k-3*(i*i)); n=j-m*i; o=m; p=n; document.Form1.i.value = i; document.Form1.j.value = j; document.Form1.k.value = k; document.Form1.l.value = l; document.Form1.m.value = m; document.Form1.n.value = n; document.Form1.o.value = o; document.Form1.p.value = p; } </script> </body> この中で、結果のoとpの部分を、小数点第四にまでに抑えたいのです、今現在では、小数点以下が10ケタ以上普通に出てしまいます。どちらも四ケタに抑えたいので、このプログラムに導入出来るような小数点処理のプログラムを知っている方がいらっしゃれば、是非丁寧に教えてほしいです。 よろしくお願いします。

  • IF関数で違う値もTRUEになる

    0502501G1、502500の二つの値を、=exact(A1,B1)で比べた結果がなぜかTrueになります。 関数が入ったセルをF2で開き、変更をせずにEnterを押すとFalseになります。 この現象について、3つ質問があります。 1.マクロでの比較でも方法によっては同じ現象がおきるでしょうか? 例えば if cells(1,1).value= cells(1,2).value thenや、 A1 = cells(1,1).value B1 = cells(1,2).value IF A1= B1 then など、比較方法は色々有ると思います。 2.このバグを直す方法ありますか? 3.このバグの原因はなんでしょうか? 非常に困っていますし、もし同一の原因でマクロなどでも似たような現象、あるいは全く異なるバグがおきるかもしれないと考えたら、ひじょうに不安です。

  • チェックボックスの連動でJavaScriptの記述を短くしたい。

    【あ】、【い】という項目があり、それぞれの項目内にA、Bというチェック項目があります。 【あ】項目のAにチェックを入れると【い】のAにもチェックが入るように作りました。 以下のソースでもなんとか動くのですが、【あ】、【い】という項目が増える事とA、Bというチェック項目が増えることが判り、JavaScriptのソースを少しでも短くしたいのですが、なにか好い方法がございましたらお教え頂ければ幸です。 /************参考ソースです*****************/ <html> <head> <title>無題ドキュメント</title> <script> function check_a(){ if(document.form.a.checked==true) { document.form.a.checked=true; document.form.b.checked=false; document.form.aa.checked=true; document.form.bb.checked=false; } } function check_b(){ if(document.form.b.checked==true) { document.form.a.checked=false; document.form.b.checked=true; document.form.aa.checked=false; document.form.bb.checked=true; } } function check_aa(){ if(document.form.aa.checked==true) { document.form.a.checked=true; document.form.b.checked=false; document.form.aa.checked=true; document.form.bb.checked=false; } } function check_bb(){ if(document.form.bb.checked==true) { document.form.a.checked=false; document.form.b.checked=true; document.form.aa.checked=false; document.form.bb.checked=true; } } </script> </head> <body> <form name="form"> 項目【あ】 <input type="checkbox" name="a" onclick="check_a()"> A<BR> <input type="checkbox" name="b" onclick="check_b()"> B<BR> <br /> 項目【い】 <input type="checkbox" name="aa" onclick="check_aa()"> A<BR> <input type="checkbox" name="bb" onclick="check_bb()"> B<BR> <br /> </form> </body> </html> /*************************/ 何卒、宜しくお願い申上げます。m(_ _)m

  • 小数点

    いつも参考にさせて頂いています。 javascriptを勉強し始めたばかりの初心者です。 ある数に0.07を掛けて、 その結果に小数点が発生した場合は切り上げして表示、 発生しなかった場合はそのままで表示ということを 行いと思っているのですが上手くいきません・・・ 例えば、 100×0.01= 1 100×0.02= 2 100×0.03= 3 100×0.04= 4 100×0.05= 5 100×0.06= 6 100×0.08= 8 100×0.09= 9 となりOKですが 100×0.07の場合は7.000000000000001という結果が出るので それに対して切上げを行うと8となり正しい結果が得られません・・・ どうかお分かりの方がいましたら教えて下さい。 <html> <head> <script> function calc() { var xx = parseFloat(document.form1.area1.value); var yy = parseFloat(document.form1.area2.value); var c = xx * yy; document.form1.ans.value = c; } </head> <body> <form name="form1"> <input type="text"name="area1"> <input type="text"name="area2"> <input type="button"value="計算"onclick="calc()"> <input type="text"name="ans"> </form> </body> </html> どうぞ宜しくお願いします。

  • radioボタンの値の取得の仕方?

    こんにちは,よろしくお願いします。 ラジオボタンの値でテキストフィールドのような要素をdisabledにしようと考えています。 そこで <input name="AAA" type="radio" id="AAA_0" value="0" checked="checked" onclick="xxx()"/>選択肢A <input name="AAA" type="radio" id="AAA_1" value="1" onclick="xxx()"/>選択肢B とし,javascriptのxxx functionの中では, if(document.getElementById("AAA").value == 0){ document.getElementById("BBB").disabled = true; }else if(document.getElementById("AAA").value == 1){ document.getElementById("BBB").disabled = false; } } としてみたところ,いつも document.getElementById("AAA").value の値が0のままでいくら選択肢Bをクリックしても切り替わりません。 一体何が悪いのでしょうか。教えてください。よろしくお願い申し上げます。

  • SelectのLabelの値を取得するには

    できる・できないの判断を下さい。 DB・ASPをつかってアプリケーションを作成しています。 HTMLのselectで、valueにはコード、Labelには日本語名を据えています。 submit時にLabelに"★"含まれていたら、その下のテキストエリアは、 絶対に記入、と言うチェックを、javascriptで書きたいと思っています。 ところが、どうしてもLabelの値を参照することができません。 valueで、コードを参照できることは確認しました。 これってできないのでしょうか? 以下実際に書いたJavascript function Checkform() { Chkflg = true; // assume valid if (document.forms.form_report.factor_cd.label.indexOf("★") !== -1) { if (!Chk_Lng(document.forms.form_report.coment.value)) { Chkflg = false; alert("要因に★がある場合は、必ずコメントを記入して下さい。"); return Chkflg;} if (Chkflg) document.forms.form_report.submit(); return Chkflg; } } function Chk_Lng(text) { return (text.length > 0); // returns false if empty }

  • テキストボックスを無効にすると値が取得できない

    javascriptでこのようにテキストボックスを無効に してフォームを送信するとphp側でvalueの値が取得できないのですが、入力無効にすると valueは送られないんでしょうか? <form> <input type="text" id="sample" name="sample" value="値" /> </form> スクリプト .document.getElementById('sample').disabled = true; valueにはphpで値をセットし、それをテキストボックスで編集できないようにして 値を飛ばそうとしたのですがテキストボックスのvalueの値が来てないようです。 自分なりに考えたんですが、送信する瞬間だけ(submitボタンが押された時) テキストボックスを有効に戻すようにコードを書いているのですが これ以外で何かありますか? ---このように対処--- <form onsubmit="return disb()"> <input type="text" name="sample" value="値" /> </form> スクリプト document.getElementById('sample').disabled = true; function disb(f){ f.sample.disabled = false; }

  • 小数点以下がある時だけ表示する方法(点なし)

    Office365使用しています。 Excel書式設定で 小数点以下が存在しない場合は小数点を表示せず 小数点以下がある場合のみ、小数点以下の数字と小数点を表示をしたく 下記、2つの書式設定の組み合わせで実現しております 書式設定1 【数式】=IF(RIGHT(TEXT(A1,"0.#"),1)=".",TRUE,FALSE) 【表示形式】数値(-1234) 書式設定2 【数式】=IF(RIGHT(TEXT(A1,"0.#"),1)=".",FALSE,TRUE) 【表示形式】#,##0.#;[赤]-#,##0.# 小数点第二位を表示させるには、どこをどのように修正すれば良いのでしょうか。 お詳しい方、ご教授お願い致します。 -------------------- こういったことを質問すると、私の文章が悪いのか 「そんなことも分からないのか」といった嫌味なコメントが届きます。 分からないのでお尋ねしているので、そこはどうかご容赦ください。

  • エクセル浮動小数点の問題?

    添付画像のような表があります。 A1:A5には数値が入力してあります。 1つずつ中を確認し、表示通りであることを確認しています。 D1セルは =ROUNDDOWN(20000/640800,2)+0.005 の数式で、0.035が表示されています。 D3セルは =D1=A4 の数式でTRUEが表示されています。 D5セルは =VLOOKUP(D1,A1:B5,2,FALSE) の数式で #N/Aエラーが返っています。 たぶん、エクセル特有の浮動小数点の問題ではないかとあたりをつけ、 D5セルを =VLOOKUP(ROUND(D1,3),A1:B5,2,FALSE) に変えると、ちゃんと4が返りました。 でも、そうだとすると、=D1=A4の数式でTRUEが返るのはなぜですか? ROUND(D1,3)としないとA4とマッチしないのですから、=D1=A4の式はFALSEが返るはずですよね?

専門家に質問してみよう