我想做一个简单的计数器,它将每毫秒计算该数字,再加上它在1小时内达到某个总数。问题在于计算点后面有十个数字的微小数字,这不正确。
例如,我的电话号码是“ 0.001”。
我想在几分钟内计算出这个数字。我每1分钟进行0.001 / 60 = 0.0000166667
次。如果每1小时乘0.0000166667 * 60 = 0.0010000020
。
我想以秒为单位计算以上数字。
我每1秒做一次0.0000166667 / 60 = 0.0000002778
。如果每1分钟有多个0.0000002778 * 60 = 0.0000166680
。但是结果与0.0000166667
不同。
我要计算以上数字(以毫秒为单位)。我每1毫秒做0.0000002778 / 1000 = 0.0000000003。如果I每秒有多个0.0000000003 * 1000 = 0.0000003000同样,结果不同于0.0000002778。
<?php
$my_number = 0.001;
$per_one_minute = 0.001 / 60;
echo number_format($per_one_minute,10)."<br>";
// result 0.0000166667
$reverse = 0.0000166667 * 60;
// expecting 0.0010000000
// result 0.0010000020
$per_one_second = 0.0000166667 / 60;
echo number_format($per_one_second,10)."<br>";
// result 0.0000002778
$reverse = 0.0000002778 * 60;
// expecting 0.0000166667
// result 0.0000166680
$per_one_millisecond = 0.0000002778 / 1000;
echo number_format($per_one_millisecond,10)."<br>";
// result 0.0000000003
$reverse = 0.0000000003 * 1000;
// expecting 0.0000002778
// result 0.0000003000
?>
期望的数字与结果不同,这是有问题的。我在JavaScript中像这样使用PHP计算:
function roundNumberV1(num,scale) {
if (!("" + num).includes("e")) {
return +(Math.round(num + "e+" + scale) + "e-" + scale);
} else {
var arr = ("" + num).split("e");
var sig = ""
if (+arr[1] + scale > 0) {
sig = "+";
}
var i = +arr[0] + "e" + sig + (+arr[1] + scale);
var j = Math.round(i);
var k = +(j + "e-" + scale);
return k;
}
}
function printNumbers(from,to,step) {
let current = from;
let current1 = 1;
let timerId = setInterval(function() {
document.getElementById("mynum").innerHTML = roundNumberV1(current,10);
if (current >= to) {
clearInterval(timerId);
}
current += step;
},100);
}
其中“ from”参数是PHP计算的数字,“ to”是要达到的数字(在我们的示例中为0.001),“ step”是每1毫秒的数字。我认为,如果PHP计算正确,那么Javascript将在给定的时间内显示正确的计算数字。