将数字转换为十、百、千
Convert number to tens, hundreds, thousands
我需要一个函数,给定一个数字,比如 123,将输出一个数组 [100,20,3]。我试过这样的事情(从另一个问题借来的):
function separateNumberIntoUnits(n) {
var arr = [];
var i = 10;
while (n > i / 10)
{
arr.unshift(n % i - n % (i / 10));
i *= 10;
}
return arr;
}
它适用于除 10、100 等以外的所有数字。我试图弄清楚发生了什么,但数学不是我的强项...
如果有更有效的方法,请随时编写您自己的解决方案。
我认为这是最有效的方法:
function separateNumberIntoUnits(n) {
if (n == 0) return [0];
// n = Math.floor(n); // needed for decimal numbers
var arr = [];
var i = 1;
while (n > 0) {
arr.unshift((n % 10) * i);
n = Math.floor(n / 10);
i *= 10
}
return arr;
}
document.writeln(separateNumberIntoUnits(1234) + "<br />")
document.writeln(separateNumberIntoUnits(100) + "<br />")
document.writeln(separateNumberIntoUnits(10) + "<br />")
document.writeln(separateNumberIntoUnits(1) + "<br />")
document.writeln(separateNumberIntoUnits(0) + "<br />")
unshift
是最好的方法:Array.unshift vs Array.push 和 Array.reverse:https://jsperf.com/array-unshift-vs-array-push-and-array-reverse
您可以将数字视为字符串。
将其拆分为一个数字数组,然后 map
每个数字乘以 10 的适当次方,直至其小数位:
function separateNumberIntoUnits(n) {
var s= n.toString().split('');
return s.map(function(digit, n) {
return digit * Math.pow(10, s.length - n - 1);
});
}
document.body.innerHTML=
separateNumberIntoUnits(1234) + '<br>' +
separateNumberIntoUnits(100) + '<br>' +
separateNumberIntoUnits(0);
没有数学的解决方案:
function s(n) {
return n.toString().split('').reduce(function (r, a) {
r = r.map(function (b) { return b + '0'; });
r.push(a);
return r;
}, []);
}
document.body.textContent = s(321);
这是一个简单易懂的基本解决方案。需要最少的数学知识。
function separateUnits(num) {
var number = num.toString().split('');
var multiplier = 1;
for (var i = number.length - 1; i >= 0; i--) {
number[i] *= multiplier;
multiplier *= 10;
}
return number;
}
separateUnits(2134);
输出
[2000, 100, 30, 4]
我需要一个函数,给定一个数字,比如 123,将输出一个数组 [100,20,3]。我试过这样的事情(从另一个问题借来的):
function separateNumberIntoUnits(n) {
var arr = [];
var i = 10;
while (n > i / 10)
{
arr.unshift(n % i - n % (i / 10));
i *= 10;
}
return arr;
}
它适用于除 10、100 等以外的所有数字。我试图弄清楚发生了什么,但数学不是我的强项...
如果有更有效的方法,请随时编写您自己的解决方案。
我认为这是最有效的方法:
function separateNumberIntoUnits(n) {
if (n == 0) return [0];
// n = Math.floor(n); // needed for decimal numbers
var arr = [];
var i = 1;
while (n > 0) {
arr.unshift((n % 10) * i);
n = Math.floor(n / 10);
i *= 10
}
return arr;
}
document.writeln(separateNumberIntoUnits(1234) + "<br />")
document.writeln(separateNumberIntoUnits(100) + "<br />")
document.writeln(separateNumberIntoUnits(10) + "<br />")
document.writeln(separateNumberIntoUnits(1) + "<br />")
document.writeln(separateNumberIntoUnits(0) + "<br />")
unshift
是最好的方法:Array.unshift vs Array.push 和 Array.reverse:https://jsperf.com/array-unshift-vs-array-push-and-array-reverse
您可以将数字视为字符串。
将其拆分为一个数字数组,然后 map
每个数字乘以 10 的适当次方,直至其小数位:
function separateNumberIntoUnits(n) {
var s= n.toString().split('');
return s.map(function(digit, n) {
return digit * Math.pow(10, s.length - n - 1);
});
}
document.body.innerHTML=
separateNumberIntoUnits(1234) + '<br>' +
separateNumberIntoUnits(100) + '<br>' +
separateNumberIntoUnits(0);
没有数学的解决方案:
function s(n) {
return n.toString().split('').reduce(function (r, a) {
r = r.map(function (b) { return b + '0'; });
r.push(a);
return r;
}, []);
}
document.body.textContent = s(321);
这是一个简单易懂的基本解决方案。需要最少的数学知识。
function separateUnits(num) {
var number = num.toString().split('');
var multiplier = 1;
for (var i = number.length - 1; i >= 0; i--) {
number[i] *= multiplier;
multiplier *= 10;
}
return number;
}
separateUnits(2134);
输出
[2000, 100, 30, 4]