teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

書式の追加

2020/08/03 15:51

投稿

Jon_do
Jon_do

スコア1373

answer CHANGED
@@ -31,7 +31,118 @@
31
31
  }
32
32
  });
33
33
  ```
34
- 元のコードだと少数の計算をするとずれてたで対応する予定。
34
+ 数の計算など処理を追加
35
+ なんだか酷いことに
35
36
  ```Javascript
37
+ const first = document.getElementById("q6-1");
38
+ const second = document.getElementById("q6-2");
39
+ const btn = document.getElementById("q6-btn");
40
+ const result = document.getElementById("q6result");
36
41
 
42
+ btn.addEventListener("click", () => {
43
+ const fVal = first.value;
44
+ const sVal = second.value;
45
+ const fNum = Number(fVal);
46
+ const sNum = Number(sVal);
47
+ if (fVal.match(/^-?[0-9]+.[0-9]+$/) || sVal.match(/^-?[0-9]+.[0-9]+$/)) {
48
+ changeInteger(fVal, sVal);
49
+ }
50
+ else if (Number.isInteger(fNum) && Number.isInteger(sNum)) {
51
+ result.innerText = calc(fNum, sNum);
52
+ } else {
53
+ result.innerText = "エラー";
54
+ }
55
+ });
56
+
57
+ const calc = (num1, num2) => {
58
+ const select = document.getElementById("op6").value;
59
+ switch (select) {
60
+ case "+":
61
+ return num1 + num2;
62
+ break;
63
+ case "‐":
64
+ return num1 - num2;
65
+ break;
66
+ case "×":
67
+ return num1 * num2;
68
+ console.log(num1 * num2);
69
+ break;
70
+ case "÷":
71
+ if (num2 === 0) { return "エラー" }
72
+ else {
73
+ return num1 * 10000 % num2 === 0 ? num1 / num2
74
+ : Math.trunc(num1 / num2) + "余り" + num1 % num2;
75
+ }
76
+ break;
77
+ }
78
+ }
79
+
80
+ const changeInteger = (num1, num2) => {
81
+ const num1DotLen = num1.indexOf(".") === -1 ? 0 : num1.split(".")[1].length;
82
+ const num2DotLen = num2.indexOf(".") === -1 ? 0 : num2.split(".")[1].length;
83
+ const num1Rep = num1.indexOf(".") === -1 ? num1 : num1.replace(".", "");
84
+ const num2Rep = num2.indexOf(".") === -1 ? num2 : num2.replace(".", "");
85
+ if (num1DotLen > num2DotLen) {
86
+ const digit = num1DotLen - num2DotLen;
87
+ const num1 = addZero(0, num1Rep);
88
+ const num2 = addZero(digit, num2Rep);
89
+ changeDecimal(calc(num1, num2), num1DotLen, num2DotLen);
90
+ } else if (num2DotLen > num1DotLen) {
91
+ const digit = num2DotLen - num1DotLen;
92
+ const num1 = addZero(digit, num1Rep)
93
+ const num2 = addZero(0, num2Rep);
94
+ changeDecimal(calc(num1, num2), num2DotLen, num1DotLen);
95
+ } else {
96
+ const num1 = addZero(0, num1Rep);
97
+ const num2 = addZero(0, num2Rep);
98
+ changeDecimal(calc(num1, num2), num1DotLen, num1DotLen);
99
+ }
100
+ }
101
+
102
+ const addZero = (digit, num) => {
103
+ const zero = "0"
104
+ const number = Number(num + zero.repeat(digit));
105
+ return number;
106
+ }
107
+
108
+ const changeDecimal = (num, dot1, dot2) => {
109
+ const select = document.getElementById("op6").value;
110
+ if (select === "+" || select === "‐") {
111
+ const answer = String(num).slice(0, String(num).length - dot1) + "." + String(num).slice(String(num).length - dot1);
112
+ if (answer.slice(0, 1) === ".") {
113
+ result.innerText = 0 + answer
114
+ } else if (answer.slice(0, 2) === "-.") {
115
+ result.innerText = answer.slice(0, 1) + "0" + answer.slice(1, answer.length)
116
+ } else {
117
+ result.innerText = answer
118
+ }
119
+ }
120
+ if (select === "×") {
121
+ const zero = "0";
122
+ const add0 = String(num).match("-")
123
+ ? "-" + zero.repeat(dot1 + dot2) + String(num).replace("-", "")
124
+ : zero.repeat(dot1 + dot2) + String(num);
125
+ if (add0.match(/[0]*$/)) {
126
+ const reg = new RegExp("[0]" + "{" + (dot1 - dot2) + "}$", "g");
127
+ const regNum = add0.replace(reg, "");
128
+ const answer = regNum.slice(0, regNum.length - (dot1 + dot2)) + "." + regNum.slice(regNum.length - (dot1 + dot2))
129
+ result.innerText = Number(answer);
130
+ }
131
+ }
132
+ if (select === "÷") {
133
+ if (String(num).indexOf("余り") === -1) {
134
+ result.innerText = num;
135
+ } else {
136
+ const remainder = String(num).split("余り")[1];
137
+ const remainderDot = remainder.slice(0, remainder.length - dot1) + "." + remainder.slice(remainder.length - dot1);
138
+ if (remainderDot.slice(0, 1) === ".") {
139
+ result.innerText = String(num).split("余り")[0] + "余り" + 0 + remainderDot;
140
+ } else if (remainderDot.slice(0, 2) === "-.") {
141
+ result.innerText = String(num).split("余り")[0] + "余り" + remainderDot.slice(0, 1) + "0" + remainderDot.slice(1, remainderDot.length)
142
+ } else {
143
+ result.innerText = String(num).split("余り")[0] + "余り" + remainderDot;
144
+ }
145
+ }
146
+ }
147
+ }
37
148
  ```。

2

文法の修正

2020/08/03 15:50

投稿

Jon_do
Jon_do

スコア1373

answer CHANGED
@@ -30,4 +30,8 @@
30
30
  result.innerText = "エラー";
31
31
  }
32
32
  });
33
- ```
33
+ ```
34
+ 元のコードだと少数の計算をするとずれてたので対応する予定。
35
+ ```Javascript
36
+
37
+ ```。

1

書式の改善

2020/07/31 05:36

投稿

Jon_do
Jon_do

スコア1373

answer CHANGED
@@ -1,5 +1,6 @@
1
1
  アウトプットのため作成。とりあえず
2
2
  半角数字以外(-.+は除く)を打ち込むとエラーが出るようにしてみました。
3
+ 2進数や8進数16進数も対応しているみたいです。
3
4
  ```Javascript
4
5
  const first = document.getElementById("q6-1");
5
6
  const second = document.getElementById("q6-2");