我知道对于数组,可以这样做:
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()
以删除尾随的零。
有什么想法吗?
答案 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)
答案 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
函数中的值。