在JavaScript中使用onclick()向数字添加小数点

在JavaScript中使用onclick()向数字添加小数点,javascript,function,decimal,parsefloat,Javascript,Function,Decimal,Parsefloat,我正在构建一个计算器,并尝试使用onclick方法在JavaScript中向数字添加一个十进制数。因此,我有一个名为handleNumberClick的函数,它将返回我单击的任何整数,然后有另一个函数,理论上应该为number函数的值添加一个小数 我使用了parseFloat方法,认为这将是我问题的答案,但似乎并非如此。我的十进制函数是handleDecimalClick HTML 记录小数点后的距离,然后用它来计算下一次按下按钮的10的幂 var powerOfTen = -1; 当用户单击

我正在构建一个计算器,并尝试使用onclick方法在JavaScript中向数字添加一个十进制数。因此,我有一个名为
handleNumberClick
的函数,它将返回我单击的任何整数,然后有另一个函数,理论上应该为number函数的值添加一个小数


我使用了
parseFloat
方法,认为这将是我问题的答案,但似乎并非如此。我的十进制函数是
handleDecimalClick

HTML
记录小数点后的距离,然后用它来计算下一次按下按钮的10的幂

var powerOfTen = -1;
当用户单击“.”按钮时,将
powerfactory
设置为第一个值-1

powerOfTen = -1;
然后,当按下一个数字按钮时,将其乘以10的幂,即
powerfactory
的幂,然后将其与您已有的数字相加。然后,从
中减去一

number += digit * Math.pow(10, powerOfTen);
powerOfTen--;

记录小数点后的距离,然后用它来计算下一次按下按钮的10的幂

var powerOfTen = -1;
当用户单击“.”按钮时,将
powerfactory
设置为第一个值-1

powerOfTen = -1;
然后,当按下一个数字按钮时,将其乘以10的幂,即
powerfactory
的幂,然后将其与您已有的数字相加。然后,从
中减去一

number += digit * Math.pow(10, powerOfTen);
powerOfTen--;

我认为价值正在几个地方消失。
handleNumberClick
handleDecimalClick
中的行,您可以在其中设置
currentOperator
的值:

function handleNumberClick(num) {
    if(operatorPressed) {
      currentOperand = num;
    }
    else {
      currentOperand += num;
    }
    operatorPressed = false;
    displayValue(currentOperand);
    console.log(num);
    parseFloat(num);
    console.log(prevOperand + 'prevOperand');
    console.log(currentOperand + 'currentOperand');
}
function handleDecimalClick()   {
    currentOperand += '.';
    //console.log(displayNumbers.value);
}
我还没有测试所有的计算器功能来寻找其他问题,但这些更改似乎允许使用小数



(我创建了一个定义了一些单元测试的数组。在javascript中向下滚动,在第142行查找
测试
数组。可能有助于跟踪一些错误。)

我认为该值在几个地方丢失了。
handleNumberClick
handleDecimalClick
中的行,您可以在其中设置
currentOperator
的值:

function handleNumberClick(num) {
    if(operatorPressed) {
      currentOperand = num;
    }
    else {
      currentOperand += num;
    }
    operatorPressed = false;
    displayValue(currentOperand);
    console.log(num);
    parseFloat(num);
    console.log(prevOperand + 'prevOperand');
    console.log(currentOperand + 'currentOperand');
}
function handleDecimalClick()   {
    currentOperand += '.';
    //console.log(displayNumbers.value);
}
我还没有测试所有的计算器功能来寻找其他问题,但这些更改似乎允许使用小数



(我创建了一个定义一些单元测试的数组。在javascript中向下滚动,在第142行查找
测试
数组。这可能有助于跟踪一些错误。)

这看起来可能是一个家庭作业问题,因此我将给出一些建议,以帮助您解决问题

首先,请记住,操作数是表示数值的字符串,而不是实际的数值。这可以在
add
subtract
multiply
divide
函数中看到,这些函数总是对两个参数执行
parseFloat
。但是,每个函数返回的值都是实际的数值。因此,在每种情况下,当您调用
displayValue
时,您都在传递一个数字。这意味着
parseFloat
调用
displayValue
是多余的。从技术上讲,您所拥有的并不是错误的,但确实表明存在一些混乱

类似地,传递到
handleNumberClick
的值始终是一个数字。在该函数中不需要调用
parseFloat
。无论如何,您没有对解析的结果执行任何操作,因此调用实际上什么也不做

handleNumberClick
中的第一条语句是问题的核心。你有:

currentOperator=operatorPressed?num:displayNumbers.value+=num

如果
operatorPressed
为true,
currentOperator
被设置为一个数字(因为
num
是一个数字),这与您假设它是一个字符串不一致。这一点非常重要,因为
+
(和
+=
)的含义可以是数字相加或字符串串联,具体取决于参数。然后,如果
operatorPressed
为false,
currentOperator
为字符串。但事实上,您正在同时更改
currentOperator
(因为
=
)和
displayNumbers.value
(因为
+=
),这可能不是您想要的。通常,您只在
x+=…
之类的语句中使用
+=
,而不是在赋值语句的右侧。你可以做到,但这是非常罕见的


看看这能不能让你摆脱困境。如果没有,请发表评论或更新,我会再看一看。

这看起来可能是家庭作业问题,因此我将给出一些建议,帮助您解决问题

首先,请记住,操作数是表示数值的字符串,而不是实际的数值。这可以在
add
subtract
multiply
divide
函数中看到,这些函数总是对两个参数执行
parseFloat
。但是,每个函数返回的值都是实际的数值。因此,在每种情况下,当您调用
displayValue
时,您都在传递一个数字。这意味着
parseFloat
调用
displayValue
是多余的。从技术上讲,您所拥有的并不是错误的,但确实表明存在一些混乱

类似地,传递到
handleNumberClick
的值始终是一个数字。在该函数中不需要调用
parseFloat
。无论如何,您没有对解析的结果执行任何操作,因此调用实际上什么也不做

handleNumberClick
中的第一条语句是问题的核心。你有:

currentOperator=operatorPressed?num:displayNumbers.value+=num

如果
operatorPressed
为真,
currentOperator
被设置为一个数字(因为
num
是一个数字),这与您的as不一致