Javascript:数字的独立位置值
我想要一个函数,可以接受一个数字(比如1000.43)并返回十、百、千和小数部分。因此,在1000.43中,它可能会返回一个带有Javascript:数字的独立位置值,javascript,Javascript,我想要一个函数,可以接受一个数字(比如1000.43)并返回十、百、千和小数部分。因此,在1000.43中,它可能会返回一个带有[1000,0,0,43]的数组。我知道这听起来很难,但我该怎么做呢。也许你可以给我一些建议如何做到这一点,或者可以提供我的代码。无论哪种方法都非常受欢迎。首先,您可以使用floor()删除小数部分,然后减去: function splitToParts(n) { var wholePart = Math.floor(n); var decimalPar
[1000,0,0,43]
的数组。我知道这听起来很难,但我该怎么做呢。也许你可以给我一些建议如何做到这一点,或者可以提供我的代码。无论哪种方法都非常受欢迎。首先,您可以使用floor()
删除小数部分,然后减去:
function splitToParts(n) {
var wholePart = Math.floor(n);
var decimalPart = n - wholePart;
}
然后,您只需继续除以10
,直到n
为0
,然后将其推入(嗯,unshift
ing)数组:
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
,以避免无限循环
哦,这是一个高尔夫版本,因为我想:
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}
首先,您可以使用
floor()
并减去以下内容来删除小数部分:
function splitToParts(n) {
var wholePart = Math.floor(n);
var decimalPart = n - wholePart;
}
然后,您只需继续除以10
,直到n
为0
,然后将其推入(嗯,unshift
ing)数组:
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
,以避免无限循环
哦,这是一个高尔夫版本,因为我想:
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}
这是最短但最完整的实现:
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]
功能部件(d){
var num=(d+“”).split(“”)
,array=array.prototype.slice.call(num[0])
,零=“”;
对于(var i=array.length-2;0这是最短但完整的实现:
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]
功能部件(d){
var num=(d+“”).split(“”)
,array=array.prototype.slice.call(num[0])
,零=“”;
对于(var i=array.length-2;0首先检查
并拆分该字符串。如果其为十进制,则将其添加到数组中。然后使用unshift
反向循环将每个数字添加到数组的开头。同样,在循环中,如果计数器从零开始,则该数字是必须添加的零数d到数字。所以一些示例代码
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));
}
var num='1234.5';
var-arr=[];
num=num.split('.');
如果(数字[1]!=''){
arr.unshift(num[1]);
}
part=num[0],len=part.length,零=000000000000;
对于(var i=0;i首先检查
并拆分该字符串。如果它们是十进制数,则将其添加到数组中。然后使用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));
}
var num='1234.5';
var-arr=[];
num=num.split('.');
如果(数字[1]!=''){
arr.unshift(num[1]);
}
part=num[0],len=part.length,零=000000000000;
对于(var i=0;i它应该很简单-有多少个单位,几十个,几百个,几千个
只要注意小数点就可以了
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
*/
它应该很简单-有多少个单位,几十个,几百个,几千个
只要注意小数点就可以了
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
*/
可以像这样使用模(%)
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;
}
函数拆分编号(num){
var len=num.toString().split('.')[0].length,//获取小数点以上的长度
d=数学功率(10,len),
a=[];
对于(变量i=0;i1){
d/=10;
a、 推(数学地板(x/d));
}否则{
//小数点以下
a、 推(x);
}
}
返回a;
}
您可以像这样使用模(%)
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;
}
函数拆分编号(num){
var len=num.toString().split('.')[0].length,//获取小数点以上的长度
d=数学功率(10,len),
a=[];
对于(变量i=0;i1){
d/=10;
a、 推(数学地板(x/d));
}否则{
//小数点以下
a、 推(x);
}
}
返回a;
}
对于1000.43,数组不是[1000,0,0,43]
?那么一个人的位置呢?1234.234是什么-你需要将小数部分分成十分之一/百分之一/千分之一吗?它是[1000,200,30,4,234]?实际上,它是[1,0,0,43]
。相关:对于1000.43,数组不是[1000,0,0,43]
?那么一的位置呢?1234.234应该是什么-你需要将小数部分分成第十/第一百/千分之一吗?它是[1000,200,30,4,234]?实际上,它应该是[1,0,0,43]
.Related:@David:确保您测试了最新版本-出现了一个bug:p当我执行拆分部分(4314.23);
它会给我[4000,300,10,4,0.2299999999956344]
JavaScript不能很好地处理浮点数。在这种情况下,字符串操作可能是首选的,因为拆分部分(10.43)
返回[10,0.4299999999997]
@David:是的,标准不能准确地表示某些数字。你必须将它们四舍五入到合理的范围内。“解释为什么会这样”.我为你做什么?什么让你有权要求我做点什么?学点礼貌!答案是在谷歌上对浮点运算不准确性的任何基本解释。或者读一本关于数值分析的书。从本质上说,精确度的损失来自于你这里的参数太大这一事实为了保持精度,会有一些精度损失(相对于要减去的数字有多大)。@David:确保测试最新版本-有一个错误:p当我执行splitToParts(4314.23);
它给了我[4000,300,10,4,0.2299999956344]
JavaScript不能很好地处理浮动p