我正在为叔叔制作这个英亩和克拉的计算器,以帮助他的工作。
我将在此示例中解释这件事的整个想法。因此,如果添加3.22 + 2.2,则应为5.42,但在此计算器中,3.22 + 2.2应为= 6,因为3英亩+ 2英亩= 5英亩,而22克拉+ 2克拉= 1英亩,因此总数为6英亩。
我在代码中执行此操作的方式是,将3.22分为两个,3和22,另一个分为2和2,然后将整数和分数相加,如果分数> = 24我将整数加1,如果整个计算中还有分数,我将其保留。例如3.15 + 2.15 = 6.6,但是我在如何加数字上受阻,那里还有一个错误,我不知道该怎么解决。
无论如何,这是code
function getValue(v) {
return +v.toString().match(/\.(\d*)/)[1] || 0;
}
function getTotal() {
d += Math.floor(num);
p += getValue(num);
if (p >= 24) {
p -= 24;
++d;
}
total = d + p / 100;
ptag.textContent = total;
}
我在卡住的地方添加了代码的一部分。
注意:我正在尝试使事物能够添加多个数字,而不仅仅是两个。我也在尝试添加减法,但是我不知道如何开始进行减法,因为我什至还没有完成加法。
如果您正在谈论的错误是这样的:
Uncaught TypeError: Cannot read property '1' of null
这是由于您的getValue函数。我的建议是,不要使用像
这样复杂的东西function getValue(v) {
return +v.toString().match(/\.(\d*)/)[1] || 0;
}
使用
function getValue(v) {
return floor((v % 1) * 100);
}
这与您编写的代码具有相同的作用。例如,从输入3.13返回13。
但是几乎没有其他问题。
首先,您应该不定期地更新您的num变量,否则,它将始终保持为空字符串(您仅在第20行定义了该变量,之后没有对其进行更新) 。
第二,使用后应清除d和p变量。截至目前,这两个变量在您每次运行getTotal函数
时都会不断增加。关于如何添加两个数字的问题,建议您创建一个变量,以便在其中存储用户键入的第一个数字。
例如,当用户键入4.19并按加号按钮时,将4.19保存到变量中(假设firstNum)。然后,当用户按下相等按钮时,将来自当前输入字段的数字与firstNum变量相加。
关于您要如何精确地添加两个不同的数字,请破坏要添加到英亩部分和卡拉茨部分中的两个数字。然后分别添加它们,然后使用getTotal。
因此,如果数字是3.21和5.18,则将3和5相加,再将21和18相加,然后将两者都相加。您将获得8.39。最后,将8.39转换为9.15。
抱歉,如果我的计算不正确。这是我第一次有了这个概念!但我相信这是要走的路。