Javascript:分隔数字的位置值

时间:2012-02-25 16:28:52

标签: javascript

我想要一个可以取一个数字(比如1000.43)并返回数十,数百,数千和小数部分的函数。所以在1000.43中,它可能会返回一个[1000, 0, 0, .43]的数组。我知道这听起来很难但我该怎么办呢。也许你可以给我一些关于如何做到这一点的建议或者可以为我提供代码。无论哪种方式都非常感激。

5 个答案:

答案 0 :(得分:3)

首先,您要使用floor()删除小数部分并减去:

function splitToParts(n) {
    var wholePart = Math.floor(n);
    var decimalPart = n - wholePart;
}

然后,您只需按10除以n0,并将其推送(好,unshift)到数组中:

function splitToParts(n) {
    var wholePart = Math.floor(n);
    var decimalPart = n - wholePart;
    var parts = [];
    var multiplier = 1;

    while(wholePart > 0) {
        var result = wholePart % 10;

        if(result > 0) {
            parts.unshift(result * multiplier);
        }

        wholePart = Math.floor(wholePart / 10);
        multiplier *= 10;
    }

    if(decimalPart) {
        parts.push(decimalPart);
    }

    return parts;
}

您还可以查看Infinity-Infinity,以避免无限循环。


哦,这是一个高尔夫版本,因为我想:

function(n,p,r,m,x){for(r=[n-(n|0)],n=n|0,m=1;n;n=n/10|0,m*=10)(x=n%10)?r.unshift(x*m):0;return r}

答案 1 :(得分:1)

这是最短但完整的实施:

function parts(d) {
    var num = (d+'').split('.')
      , array = Array.prototype.slice.call(num[0])
      , zeros = '';
    for (var i = array.length-2; 0 <= i; i--) {
        zeros += '0';
        if (array[i] !== '0') array[i] = array[i] + zeros;
    }
    if (num[1]) array.push('.' + num[1]);
    return array;
}
// Example:
parts(10.4); // [10, 0, .4]

答案 2 :(得分:0)

首先检查.并在其上拆分字符串。如果它们是十进制,则将其添加到数组中。然后循环向后使用unshift将每个数字添加到数组的开头。如果您的计数器从零开始,那么在您的循环中,那么该数字是您必须添加到数字的零数。一些示例代码。

var num = '1234.5';
var arr=[];

num = num.split('.');

if(num[1]!==''){
  arr.unshift(num[1]);
}
part=num[0],len=part.length,zeroes='000000000000';
for(var i=0;i<len;i++){
  var digit = part.substr(len-i-1,1);
  arr.unshift(digit+zeroes.slice(0,i));
}

答案 3 :(得分:0)

它应该很简单 - 有多少单位,数十,数百,数千...

只是注意你身上的小数点。

function tithe(n){
    if(!isFinite(n)) return NaN;
    n= Math.abs(n);
    var A= [], I= Math.floor(n),
    dec= String(n).split('.')[1],
    x= 1, t;
    while(I/x> 0){
        t= I%(x*= 10);
        I-= t;
        A.unshift(t);
    }
    if(dec) A.push(+dec);
    return A;
}
tithe(12022045.554)

/*  returned value: (Array)
10000000,2000000,0,20000,2000,0,40,5,554
*/

答案 4 :(得分:0)

您可以像这样使用Modulo(%)

    var num = 1573.64;
    var th = Math.floor((num % 10000) / 1000),
            h = Math.floor((num % 1000) / 100),
            t = Math.floor((num  % 100) / 10),
            u = Math.floor(num % 10),
            d = num % 1;

    console.log(th, h, t, u, d);

写作函数可能类似于

function splitNumber(num) {

        var len = num.toString().split('.')[0].length, //get length above decimal point
            d = Math.pow(10, len),
            a = [];

        for (var i = 0; i < len+1; i++) {
            var x = num % d;
            if (d > 1) {
                d /= 10;
                a.push(Math.floor(x / d));
            } else {
                //below decimal point
                a.push(x);
            }
        }
        return a;
}