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

时间:2017-12-11 10:26:14

标签: 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);
    });
    return r;
}, []);

我首先尝试删除多余的数字,但必须添加Number()以删除尾随的零。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

NOT 使用.toFixed的结果作为实际数字。它的唯一目的是为演示目的舍入数字,因此它返回一个字符串。

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

为了证明这一点,看看如果你试图评估会发生什么:

> (0.03).toFixed(19)
"0.0299999999999999989"

使用数字而不对其进行舍入几乎总是更好,然后仅在显示时将它们舍入。

如果您的号码实际上代表一种货币并且确切的结果很重要(例如,为了计算税额),那么您根本不应该使用浮点数。使用整数数学,并计入例如美分而非美元。

从评论中看来,您实际上想要显示最多两位小数的数字,例如像.toFixed(2)但删除了尾随零,以及嵌套2D数组的操作只是因为你还没有找到一种方法来使用Angular指令。

要做到这一点,恕我直言,留在" string"空间而不是滥用Number构造函数。你可以使用例如:

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

答案 1 :(得分:0)

您可以使用嵌套Array#map调用来获取结果:



%B




答案 2 :(得分:0)

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

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函数中的值。