Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用toFixed()删除矩阵所有元素的额外数字_Javascript_Arrays - Fatal编程技术网

Javascript 使用toFixed()删除矩阵所有元素的额外数字

Javascript 使用toFixed()删除矩阵所有元素的额外数字,javascript,arrays,Javascript,Arrays,我知道,对于阵列,可以这样做: anArray = anArray.sum.map(function(elem){ return Number(elem.toFixed(2)); }); 但是,对于二维数组如何实现呢 这是我的方法: aMatrix = aMatrix.reduce( function (r, a) { a.forEach(function (b, i, j) { r[i][j] = r[i][j].toFixed(2); });

我知道,对于阵列,可以这样做:

anArray = anArray.sum.map(function(elem){
    return Number(elem.toFixed(2));
});
但是,对于二维数组如何实现呢

这是我的方法:

aMatrix = aMatrix.reduce( function (r, a) {
    a.forEach(function (b, i, j) {
        r[i][j] = r[i][j].toFixed(2);
    });
    return r;
}, []);
我只想先删除多余的数字,必须添加
Number()
才能删除后面的零

有什么想法吗?

您可以使用嵌套调用来获得结果:

var矩阵=[[1.234,4.123123,3.1235134512],[23.12312,90.123123,3.123123];
var结果=矩阵.map(函数(子数组){
返回子数组.map(函数(elem){
返回编号(元素toFixed(2));
});
});
控制台日志(结果)您可以使用嵌套调用来获得结果:

var矩阵=[[1.234,4.123123,3.1235134512],[23.12312,90.123123,3.123123];
var结果=矩阵.map(函数(子数组){
返回子数组.map(函数(elem){
返回编号(元素toFixed(2));
});
});

控制台日志(结果)与循环抛出一维数组的方式相同,可以循环抛出父数组中的每个数组:

var newArr = anArray.sum.map(function(elem){
    return elem.map( function( subElem ){
      return subElem.toFixed(2); 
    });
});
或者,在
es6
语法中:

anArray.sum.map( sub => sub.map( subSub => subSub.toFixed(2)));

然后您不需要返回任何内容,只需更新
map
函数中的值。

与循环抛出一维数组的方式相同,您可以循环抛出父数组中的每个数组:

var newArr = anArray.sum.map(function(elem){
    return elem.map( function( subElem ){
      return subElem.toFixed(2); 
    });
});
或者,在
es6
语法中:

anArray.sum.map( sub => sub.map( subSub => subSub.toFixed(2)));
然后不需要返回任何内容,只需更新
map
函数中的值。

不要将
.toFixed
的结果用作实际数字。它的唯一目的是为了表示而对数字进行四舍五入,因此它返回字符串

如果您在计算时确实必须使用该精度的数字,请使用例如
Math.round(n*100.0)/100.0
,但请记住,在计算机的二进制浮点数表示法中,通常无法精确表示这些数字

为了演示这一点,请查看如果您尝试评估:

> (0.03).toFixed(19)
"0.0299999999999999989"
使用数字时不进行四舍五入,然后只在显示时进行四舍五入,这几乎总是更好的

如果您的数字实际上代表一种货币,并且精确的结果很重要(例如,出于税务计算目的),那么您根本不应该使用浮点。改用整数计算,用美分代替美元

从注释中可以看出,您实际上希望显示最多两位小数的数字,例如
.toFixed(2)
,但删除了尾随零,并且只需要操纵嵌套的2D数组,因为您没有找到使用角度指令来实现这一点的方法

要做到这一点,IMHO最好保持在“字符串”空间中,而不是滥用
Number
构造函数。例如,您可以使用:

myvalue.toFixed(2).replace(/0+$/, '')
不要将
.toFixed
的结果用作实际数字。它的唯一目的是为了表示而对数字进行四舍五入,因此它返回字符串

如果您在计算时确实必须使用该精度的数字,请使用例如
Math.round(n*100.0)/100.0
,但请记住,在计算机的二进制浮点数表示法中,通常无法精确表示这些数字

为了演示这一点,请查看如果您尝试评估:

> (0.03).toFixed(19)
"0.0299999999999999989"
使用数字时不进行四舍五入,然后只在显示时进行四舍五入,这几乎总是更好的

如果您的数字实际上代表一种货币,并且精确的结果很重要(例如,出于税务计算目的),那么您根本不应该使用浮点。改用整数计算,用美分代替美元

从注释中可以看出,您实际上希望显示最多两位小数的数字,例如
.toFixed(2)
,但删除了尾随零,并且只需要操纵嵌套的2D数组,因为您没有找到使用角度指令来实现这一点的方法

要做到这一点,IMHO最好保持在“字符串”空间中,而不是滥用
Number
构造函数。例如,您可以使用:

myvalue.toFixed(2).replace(/0+$/, '')

请在您的问题中分享一个输入和输出示例。
matrix=matrix.map(row=>row.map(col=>Number(col.toFixed(2))?您可以使用递归:@user3654571请参阅我下面的(详细)注释,说明您为什么不应该这样做。请在您的问题中分享一个输入和输出示例。
matrix=matrix.map(row=>row.map(col=>Number(col.toFixed(2))?您可以使用递归:@user3654571请参阅下面我的(详细)说明,关于您不应该实际执行此操作的原因。“您不需要返回任何内容,只需更新map函数中的值即可。”在map中,我想您需要返回。我用这个代码得到了
[未定义,未定义]
。。。添加时,返回的代码与@Ori@RolandStarke我的坏,我匆忙更新,并没有把所需的代码。编辑。谢谢大家!@Alnitak在看到你的评论之前我已经处理好了,谢谢你!“您不需要返回任何内容,只需更新map函数中的值。”在map中,我认为您需要返回。我用这个代码得到了
[未定义,未定义]
。。。添加时,返回的代码与@Ori@RolandStarke我的坏,我匆忙更新,并没有把所需的代码。编辑。谢谢大家!@Alnitak在看到你的评论之前我已经处理好了,谢谢你!注意:社区维基,因为我知道这不是对所问问题的“回答”,但我需要说的话太长,无法发表评论。那么,有没有一种方法可以比使用
toFixed()
更安全地删除不需要的数字?最好的解决方法是只在演示时对它们进行取整?在我的特殊情况下,我没有找到更好的解决办法。我正在使用AngularJS,我必须在屏幕上显示一个表,其中包含行和列的数据,最后一列是每行值的总和。我使用插值打印值,以