我有以下代码,应该每秒增加2.6。但是在第一次添加后我得到了8。我怎样才能解决这个问题?在这里的测试仪上它可以工作,但是在我的页面上我得到8 https://260044-5.web1.fh-htwchur.ch/
提前感谢。
setTimeout(start, 0000);
var i = 2.6;
var num = document.getElementById('humans');
function start() {
setInterval(increase, 1000);
}
function increase() {
if (i < 100000000) {
i += 2.6;
num.innerText = Math.round(i);
}
}
<div id="humans">2.6</div>
<p>Menschen wurden geboren.</p>
设置文本时要四舍五入:
num.innerText = Math.round(i);
如果要显示小数点后第n位的值,请使用toFixed
。例如:
num.innerText = i.toFixed(1); /* will give you one number after the decimal point */
这里的代码有效,但是在您发布的链接中,您的脚本中已经包含该代码:
//funtion for humans born
setTimeout(start, 0000);
var i = 2.6;
var num = document.getElementById('humans');
function start() {
setInterval(increase, 1000);
}
function increase() {
if (i < 100000000) {
i += 2.6;
num.innerText = Math.round(i);
}
}
//funtion for trees cut
setTimeout(start, 0000);
var t = 475.646879756;
var t = document.getElementById('trees');
function startTwo() {
setInterval(increase, 1000);
}
您执行两次start
:一个在“人类出生”之后执行,另一个在“树木砍伐”之后执行。
因此您有两个并发间隔,它们每秒执行两次increase
,并且每个increase
调用都在操纵相同的变量。这就是为什么您立即获得8。
我不确定您的目标是什么,但是您可以使用不同的变量/函数来每秒增加“出生的人”和“砍伐树木的时间”,或者您有一个start
调用(因此有一个increase
函数每秒调用一次)。
无论如何,这是您的错误:如果您想阐明自己的逻辑;我/我们可以提供进一步的帮助。
您可以尝试这个。主要问题是四舍五入,您基本上使用了Math.round()
,但是您正在处理浮点数据类型。因此,只需使用YourNumber.toFixed(n)
,其中n
是要显示的小数点数。您可以在下面查看。我只是使您的代码简短而简短,但是您基本上可以更改代码的四舍五入,它应该可以工作。
setTimeout((function(){ var i = 2.6; return function start() { setInterval(()=> { if (i < 100000000){ i += 2.6; document.getElementById('humans').innerText = i.toFixed(1); } }, 1000); }; })(), 0000);
<div id="humans">2.6</div> <p>Menschen wurden geboren.</p>