|
@@ -12,6 +12,7 @@ import "./App.css";
|
|
|
let imdtRes;
|
|
|
let imdtResIdx;
|
|
|
let resArr = [];
|
|
|
+let noOfDigits = 0;
|
|
|
|
|
|
function Addition() {
|
|
|
const [input, setInput] = useState(""); // initial user input like 34+56.7
|
|
@@ -38,16 +39,15 @@ function Addition() {
|
|
|
const handleResChange = (e, nosLeft) => {
|
|
|
if(typeof e === "string"){
|
|
|
imdtRes = e;
|
|
|
- let carryArrCopy = [...carryArr]
|
|
|
- carryArrCopy[nosLeft] = carryArrCopy[nosLeft+1]
|
|
|
- setCarryArr(carryArrCopy)
|
|
|
}else{
|
|
|
imdtRes = e.target.value;
|
|
|
}
|
|
|
|
|
|
+ // remove deleted input
|
|
|
if(imdtRes === ""){
|
|
|
resArr.shift();
|
|
|
}else{
|
|
|
+ // add input number to result array
|
|
|
resArr.unshift(imdtRes);
|
|
|
if(nosLeft === 0){
|
|
|
setShowAlert(true);
|
|
@@ -77,11 +77,6 @@ function Addition() {
|
|
|
return 0
|
|
|
}
|
|
|
|
|
|
- const addNumbersToDiv = (numbers, noOfDigits) => {
|
|
|
- console.log("---", carryArr.join(""))
|
|
|
-// document.getElementById("overview").innerHTML += carryArr.join("");
|
|
|
- }
|
|
|
-
|
|
|
function numbersToArrOfArr(numbers) {
|
|
|
let befComma = Math.max(...numbers).toString().split(".")[0].length;
|
|
|
let afterComma = Math.max(...numbers.map(x => afterCommaLen(x)));
|
|
@@ -129,15 +124,14 @@ function Addition() {
|
|
|
}
|
|
|
setNumbersGrid(nrGrid);
|
|
|
setCommaIdx(befComma+1);
|
|
|
- return [numbersArr, arrLength]
|
|
|
+ // TODO: assert all have same length and comma at same index?
|
|
|
}
|
|
|
|
|
|
const startCalculation = () => {
|
|
|
if (input.includes("+")){
|
|
|
let numbers = input.split("+").map(x => parseFloat(x.replace(",",".")));
|
|
|
setRealResult(numbers.reduce((x,y) => x+y, 0));
|
|
|
- let [numbersArr, arrLength] = numbersToArrOfArr(numbers);
|
|
|
- addNumbersToDiv(numbersArr, arrLength);
|
|
|
+ numbersToArrOfArr(numbers);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -154,21 +148,21 @@ function Addition() {
|
|
|
|
|
|
let labelText = "";
|
|
|
let nosLeft = imdtResIdx + 1;
|
|
|
- let noOfDigits = 0;
|
|
|
let carryText = "Übertrag = ";
|
|
|
+ let carryOffset = 0;
|
|
|
|
|
|
if(typeof numbers === "object" && imdtResIdx !== -1){
|
|
|
- if(typeof imdtResIdx === "undefined"){
|
|
|
+ if(typeof imdtResIdx === "undefined" || imdtResIdx === null){
|
|
|
noOfDigits = Math.min(...numbers.map(n => n.length));
|
|
|
imdtResIdx = noOfDigits-1;
|
|
|
}
|
|
|
if(imdtResIdx === commaIdx){
|
|
|
handleResChange(".", nosLeft)
|
|
|
imdtResIdx = imdtResIdx - 1;
|
|
|
+ carryOffset = 1;
|
|
|
}
|
|
|
|
|
|
for (let n in numbers){ // iterate numbers
|
|
|
-
|
|
|
if(nosLeft === 1 && carryArr[0] === "0"){
|
|
|
nosLeft = 0;
|
|
|
imdtResIdx = -1;
|
|
@@ -182,8 +176,8 @@ function Addition() {
|
|
|
labelText += digit;
|
|
|
|
|
|
if (parseInt(n) === numbers.length - 1){
|
|
|
- if(carryArr[imdtResIdx+1]!=="undefind" && carryArr[imdtResIdx+1] > 0){
|
|
|
- labelText += " + " + carryArr[imdtResIdx+1].toString();
|
|
|
+ if(carryArr[imdtResIdx+carryOffset]!=="undefind" && carryArr[imdtResIdx+carryOffset] > 0){
|
|
|
+ labelText += " + " + carryArr[imdtResIdx+carryOffset].toString();
|
|
|
}
|
|
|
labelText += " = ";
|
|
|
}else{
|
|
@@ -191,7 +185,7 @@ function Addition() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if(carryArr[imdtResIdx] > -1 || imdtResIdx === noOfDigits-1){
|
|
|
+ if(carryArr[imdtResIdx+carryOffset] > -1 || imdtResIdx === noOfDigits-1){
|
|
|
imdtRes = -1;
|
|
|
imdtResIdx = imdtResIdx - 1;
|
|
|
nosLeft = nosLeft - 1;
|
|
@@ -270,6 +264,8 @@ function Addition() {
|
|
|
}
|
|
|
if (foundComma){
|
|
|
idxCarry += 1;
|
|
|
+ continue;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
// add carry only if > 0
|
|
@@ -300,7 +296,7 @@ function Addition() {
|
|
|
|
|
|
let btnSubmit = document.createElement("button");
|
|
|
btnSubmit.innerHTML = "submit result";
|
|
|
- btnSubmit.addEventListener("click", () => console.log("end"));
|
|
|
+ btnSubmit.addEventListener("click", finishCalculation);
|
|
|
document.getElementById("idmtResultSteps").appendChild(btnSubmit);
|
|
|
|
|
|
}
|