如何使用JavaScript将小数点分成整数?

时间:2012-02-01 15:46:38

标签: javascript split

我有以下代码;

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)

9 个答案:

答案 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工具变得更加简单。