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