我有以下代码;
var looptijd_1 = de_snelheid * de_afstand;
var split_looptijden_1 = new Array();
split_looptijden_1 = looptijd_1.split('.');
正如您所看到的,这个想法非常简单。我想用点分割一个数字。因此,如果数字为69.07
,我想要一个69
的变量和一个07
的变量。
我知道我必须创建一个变量字符串并拆分它们,但我需要07
作为07
而不是7
(因为我已经做了一些数学运算用它)。
我知道我可以取第一个值,然后存储它,然后存储变量 - 存储变量,所以我有0.07
,但我希望有更好的方法来实现这个,因为这需要在页面上完成12次。
有没有更好的方法来实现我的目标(variable1 = 69; variable2=07
)和两个整数?
EDIT; 总的来说,这是关于步行时间的数学...并且没有常数变量,所以我把它们砍掉,然后我想做这个技巧(点数后面的数字* 60)
答案 0 :(得分:8)
如果您想要对结果执行计算,则无需将数字转换为字符串,将其拆分,然后将生成的字符串转换回数字。请改用一些基本数学:
var split_looptijden_1 =
[
(looptijd_1 > 0) ? Math.floor(looptijd_1) : Math.ceil(looptijd_1),
looptijd_1 % 1
];
答案 1 :(得分:2)
This is my assumption:
Convert your decimal number into string and then split it using .split() method then store the result into an array.
var num=10.07;
var str=num.toString();
var numarray=str.split('.');
var a=new Array();
a=numarray;
console.log(a[0]);
console.log(a[1]);
尝试使用以下示例,您将获得所需的结果。如果console.log()无效
its working fine for me.
Demo:
<!DOCTYPE html>
<html>
<body>
<p id="demo">Integer Part</p>
<p id="demo1">Decimal Part</p>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction()
{
var num=10.07;
var str=num.toString();
var numarray=str.split('.');
var a=new Array();
a=numarray;
var x = document.getElementById("demo");
var y = document.getElementById("demo1");
x.innerHTML=a[0];
y.innerHTML=a[1];
}demo1
</script>
</body>
</html>
答案 2 :(得分:0)
将数字设为一个字符串(此时它是一个数字,不能是split
),然后拆分它:
var split_looptijden_1 = looptijd_1.toString().split('.');
console.log(split_looptijden_1[0]); // 69
console.log(split_looptijden_1[1]); // 07
请注意new Array()
不是必需的。 split
无论如何都会返回一个新数组;你创建的那个被覆盖了。由于Javascript使用静态类型,因此您无需声明变量的类型。还要注意,如果你想要整数,你将不得不忘记前导零。如果你想要一种格式化字符的特殊方式,那就叫做一个字符串。
答案 3 :(得分:0)
这应该做你需要的事情
var looptijd_1 = de_snelheid * de_afstand;
var split_looptijden_1 = new Array();
split_looptijden_1 = (looptijd_1+"").split('.');
答案 4 :(得分:0)
您必须先将数字转换为字符串:
split_looptijden_1 = looptijd_1.toString().split('.');
答案 5 :(得分:0)
您不需要制作数组。 Split会自动执行此操作。
var looptijd_1 = de_snelheid * de_afstand + "";
var split_looptijden_1 = looptijd_1.split('.');
答案 6 :(得分:0)
整数不能与前导零一起存储。
尝试:
var looptijd_1 = de_snelheid * de_afstand;
var split_looptijden_1 = looptijd_1.toString().split('.');
这会将整数值转换为字符串,从而存储07
而不是7
。
答案 7 :(得分:0)
优点:
在计算“秒”(0.07)时,此解决方案不使用“第一个值”(67)。 (在“”中使用原始海报的字样)
通过使用因子1000,它还可以避免存储0.06999999999999318而不是0.07。将因子增加到例如10000来处理例如0.007。 (每增加一个数字* 10)
按负面值预期工作。没有舍入或转换。
注意:此解决方案忽略了对“07”的请求,这只是在答案中混合的次优解决方案的一部分。
variable1 = looptijd_1|0; // = 69 as number. No rounding.
variable2 = (looptijd_1*1000%1000)/1000; // = 0.07 as number. Simple form: x % 1
除了解决方案:
你说你需要在一个页面上做12次。但是你没有告诉你关注的是计算代码或混乱代码所需的时间。或两者兼而有之。
这些简单的计算可以忽略12次。
答案 8 :(得分:0)
我建议练习包括确定要输出十进制值的精度。这将使该值更有用,并且您可以忽略前面的零的问题。
以下是一些利用此思想的Timer示例。记下splitToPrecision(n,d)
:
class Timer {
constructor() {this.start();}
start() { this.startT = (new Date()).getTime() / 1000 }
stop() { this.stopT = (new Date()).getTime() / 1000 }
elapsed(prec) {
prec=typeof prec === 'undefined' || isNaN(prec) || prec < 0?3:prec;
var a=splitToPrecision((this.stopT - this.startT), 3)
return nToFixed(a[0] + (a[1] / 1000), prec)
}
}
function nToFixed(n,d) {
if(isNaN(d)){d=0}
var sN=String(n),iInd=sN.indexOf('.')
if (iInd > -1 && sN.length-(iInd+1) > d){
return Number(sN+"1").toFixed(d)
}
return Number(n).toFixed(d)
}
function splitToPrecision(i, n){
var iNew = nToFixed(i, n)
var a = String(iNew).split('.')
a[0] = parseInt(a[0])
if (a.length === 0) { a.push(0); } else{ a[1] = parseInt(a[1]) }
return a
}
使用以下代码测试此代码:
timer = new Timer()
setTimeout(()=>{
console.log("timeout called")
timer.stop()
console.log(`elapsed: ${timer.elapsed(2)}`)
}, 1234)
输出:elapsed: 1.31
这种方法类似于 Node.js 中现已弃用的函数的工作原理process.hrtime([time]),这使Node中的Timer工具变得更加简单。