質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

5883閲覧

jQueryを使った電卓作成。小数点を含めると計算が出来ない

kato00

総合スコア71

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2018/05/10 10:12

質問は表題の通りです。

課題で電卓をjQueryで作っています。

電卓のデザインは添付画像の通りです。

イメージ説明

整数+整数の四則演算は概ね完成に近いのですが、
小数点が入る数値の計算が出来ません。

成功パターン① 10 - 0.5 = 9.5

エラーパターン① 10 + 0.5 = 100.5 という表示になる。
エラーパターン② 1.5 + 1.5 = 1.51.5 という表示になる。
エラーパターン③ 1.5 を入力後、6という数値を入力すると 21という数値がディスプレイにでる。

とりあえず私が確認できているエラーパターンは上記になります。

必要箇所のみのコードを添付したかったのですが、どこが間違っているのか分からなかったので、長くなりますが、全てのコードを添付致しました。

その他必要情報がありましたら追記いたしますのでおっしゃってください。

宜しく御願いします。

html

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="UTF-8"> 5 <title>電卓</title> 6 <link rel="stylesheet" type="text/css" href="base.css"><!--最後に読み込んだものが適用される--> 7 <script type="text/javascript" src="js/jquery.js"></script> 8 <script> 9 10$(function(){ 11 12var number = 0; 13var totalnumber = 0; 14 15var purasu = 0; 16var purasunamber = 0; 17 18var hiku = 0; 19var hikunamber = 0; 20 21var kakeru = 0; 22var kakerunamber = 0; 23 24var waru = 0 25var warunamber = 0; 26 27var totalnumbernibai = 0; 28var purasumainasu = 0; 29var parsent = 0; 30var isdotted = 0; 31 32 33// 数値の取得(通常時) 34$("#numberArea p").on('click',function(){ 35 if(isdotted == 0){ 36 number = $(this).data('index');//数値の取得 37 totalnumber = (totalnumber * 10) + number;//桁数を増やす為の桁上げと文字の連結 38 $("#displayWrapper p").text(totalnumber); 39 alert('isdottedの番号' + isdotted); 40 alert('totalnumberは' + totalnumber); 41 alert('totalnumberの型式 ' + jQuery.type(totalnumber)); 42 } 43}); 44 45// 数値の取得(ドットの後) 46$("#numberArea p").on('click',function(){ 47 if(isdotted == 1){ 48 // totalnumber = parseInt($(this).text()); 49 number = $(this).data('index');//数値の取得 50 totalnumber = totalnumber + number;//桁数を増やす為の桁上げと文字の連結 51 $("#displayWrapper p").text(totalnumber); 52 isdotted = 0; 53 54 alert('totalnumberは' + totalnumber); 55 alert('totalnumberの型式 ' + jQuery.type(totalnumber)); 56 }else{ 57 58 } 59 60}); 61 62// ドットの処理 63$('#dotto').on('click',function(){ 64 if(isdotted == 1){ 65 66 alert(isdotted); 67 68 }else{ 69 70 totalnumber = totalnumber + '.'; 71 $("#displayWrapper p").text(totalnumber); 72 isdotted = 1; 73 alert('isdotted' + isdotted) 74 alert('totalnumber' + totalnumber) 75 alert('totalnumberの型式' + jQuery.type(totalnumber)); 76 77}}); 78 79 80 81// +ボタンを押した時 82$("#purasu").on('click',function(){ 83purasu = 1; 84alert('purasuの数値' + purasu); 85$("#displayWrapper p").text('+'); 86purasunamber = totalnumber;//一回前番号入れる 87alert("purasunamberは" + purasunamber); 88totalnumber = 0; 89}); 90 91// -ボタンを押したとき 92$("#hiku").on('click',function(){ 93hiku = 1; 94alert('hikuの数値' + hiku); 95$("#displayWrapper p").text('-'); 96hikunamber = totalnumber; 97alert("hikunamberは" + hikunamber); 98totalnumber = 0; 99}) 100 101// ×ボタンを押したとき 102$("#kakeru").on('click',function(){ 103kakeru = 1; 104alert('kakeruの数値' + kakeru); 105$("#displayWrapper p").text('×'); 106kakerunamber = totalnumber; 107alert("kakerunamberは" + kakerunamber); 108totalnumber = 0; 109}) 110 111 112//÷ボタンを押したとき 113$("#waru").on('click',function(){ 114waru = 1; 115alert('waruの数値' + waru); 116$("#displayWrapper p").text('÷'); 117warunamber = totalnumber; 118alert("warunamberは" + warunamber); 119totalnumber = 0; 120}) 121 122 123//=ボタンを押した時 124$("#iko-ru").on('click',function(){ 125// alert("イコール") 126if(purasu == 1){ 127 alert("purasunamberは" + purasunamber); 128 alert("totalnumberは" + totalnumber); 129 totalnumber = purasunamber + totalnumber; 130 $("#displayWrapper p").text(totalnumber); 131 purasu = 0; 132} 133 134if(hiku == 1){ 135 alert("hikunamberは" + hikunamber); 136 alert("totalnumberは" + totalnumber); 137 totalnumber = hikunamber - totalnumber; 138 $("#displayWrapper p").text(totalnumber); 139 hiku = 0; 140} 141 142if(kakeru == 1){ 143 alert("kakeruは" + kakeru); 144 alert("totalnumberは" + totalnumber); 145 totalnumber = kakerunamber * totalnumber; 146 $("#displayWrapper p").text(totalnumber); 147 kakeru = 0; 148} 149 150if(waru == 1){ 151 alert("waruは" + waru); 152 alert("totalnumberは" + totalnumber); 153 totalnumber = warunamber / totalnumber; 154 $("#displayWrapper p").text(totalnumber); 155 waru = 0; 156} 157 158 159}); 160 161 162// ACボタン 163$("#AC").on('click',function(){ 164totalnumber = 0; 165// alert(totalnumber); 166$("#displayWrapper p").text(totalnumber); 167}); 168 169 170// プラマイボタン押した時 171$("#±").on('click',function(){ 172 if($(this).hasClass('mainasu')){ 173 $(this).removeClass('mainasu') 174$("#displayWrapper p").text(totalnumber); 175 }else{ 176 // alert(totalnumber); 177 totalnumbernibai = totalnumber * 2; 178 purasumainasu = totalnumber - totalnumbernibai; 179 // alert(purasumainasu); 180 $("#displayWrapper p").text(purasumainasu); 181 $(this).addClass('mainasu') 182 } 183}); 184 185 186// %ボタン押した時 187$("#parsent").on('click',function(){ 188parsent = totalnumber * 0.01; 189$("#displayWrapper p").text(parsent); 190}) 191 192 193 194}); 195 196</script> 197 198</head> 199 200<body> 201 <div id="bodyWrapper"> 202 <div id="displayWrapper"> 203 <p> 2040 205 </p> 206 </div> 207 208<div id="wrapper"> 209 210 <div id="Leftwrapper"> 211 <div id="operatorWrapper"> 212 <div id="AC"> 213 <p> 214 AC 215 </p> 216 217 </div> 218 219 <div id="±"> 220 <p> 221 ± 222 </p> 223 224 </div> 225 226 <div id="parsent"> 227 <p> 228 % 229 </p> 230 </div> 231 </div><!--operatorWrapper閉じタグ--> 232 233 234 <div id="numberArea"> 235 <div id="number7" > 236 <p data-index=7> 237 7 238 </p> 239 </div> 240 241 <div id="number8"> 242 <p data-index=8> 243 8 244 </p> 245 </div> 246 247 <div id="number9"> 248 <p data-index=9> 249 9 250 </p> 251 </div> 252 <div id="number4"> 253 <p data-index=4> 254 4 255 </p> 256 </div> 257 258 <div id="number5"> 259 <p data-index=5> 260 5 261 </p> 262 </div> 263 264 <div id="number6"> 265 <p data-index=6> 266 6 267 </p> 268 </div> 269 270 <div id="number1"> 271 <p data-index=1> 272 1 273 </p> 274 </div> 275 276 277 <div id="number2"> 278 <p data-index=2> 279 2 280 </p> 281 </div> 282 283 <div id="number3"> 284 <p data-index=3> 285 3 286 </p> 287 </div> 288 289 <div id="number0"> 290 <p data-index=0> 291 0 292 </p> 293 294 </div> 295 296 <div id="kara"> 297 <p> 298 299 </p> 300 301 </div> 302 303 304 <div id="dotto"> 305 . 306 </div> 307 308 </div><!--numberArea閉じタグ--> 309 310 </div><!--Leftwapper閉じタグ--> 311 312 <div id="Arithmetic"> 313 <div id="waru"> 314 <p> 315 ÷ 316 </p> 317 </div> 318 319 <div id="kakeru"> 320 <p> 321 × 322 </p> 323 </div> 324 325 <div id="hiku"> 326 <p> 327 - 328 </p> 329 </div> 330 331 <div id="purasu"> 332 <p> 333 + 334 </p> 335 </div> 336 337 <div id="iko-ru"> 338 <p> 339 = 340 </p> 341 </div> 342 343 </div> 344 345 </div><!--wrapper--> 346 </div><!--bodyWrapper閉じタグ--> 347 348 349 350 </body> 351 </html> 352

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

JavaScriptで小数点を扱いたい時は自分で計算せずに、decimal.jsを使ってくださいな。

以下にテストデータサンプルを置いておきます。
a,0.1 * 0.1 → 0.01
b,24716*0.7 → 17301.2

投稿2018/05/11 04:40

umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

「小数点」という風に 作る側、使う側は思っていてもプログラムにとっては「.」という単なる文字列です。
型としてきちんとプログラムに認識させる必要があります。

小数点の場合はParseFloatですかね。

「小数点が入っている」という判定をした上でParseIntと使い分けが必要となりますね。

投稿2018/05/10 11:31

編集2018/05/10 11:55
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Number()を使って、数値変換するのがいいかと

投稿2018/05/11 02:44

編集2018/05/11 02:44
kszk311

総合スコア3404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問