在控制浮点数精度的同时在javascript中将数组转换为字符串

Posted

技术标签:

【中文标题】在控制浮点数精度的同时在javascript中将数组转换为字符串【英文标题】:converting array to string in javascript while controlling precision of floats 【发布时间】:2018-04-27 15:23:35 【问题描述】:

我有一个 javascript array-of-number-triples,格式为

[[123.55555,4.44444444,0.123455666],[12344.44444,7.77777777,8.8888101010],...,[1.000102340240,123.02020400,1.121212121212]]

使用 'toString()' 方法可以很好地转换为字符串。 (编辑:实际上,'toString()' 丢失了数组的二维性质,但它并没有打扰我,因为每行有 3 个数字,所以该结构仍然隐含在字符串中。)

但是,如果我想截断/舍入(我真的不在乎)小数点后 2 位或 3 位的数字怎么办?似乎 'toFixed()' 不适用于数组...

Nb:我知道我可以遍历数组并手动截断每个数字并将结果字符串拼凑在一起,但我希望有一种更优雅的方式......

【问题讨论】:

您需要以某种方式循环并修改数组中的项目。如果不想强制循环,那么可以使用map等数组方法:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 谢谢...太糟糕了,因为我问了一些我在其他地方没有看到回答的问题,而谁的回答教会了我一些东西...hum...。 【参考方案1】:

如评论;你可以使用地图:

console.log(
  [[123.55555,4.44444444,0.123455666],[12344.44444,7.77777777,8.8888101010],[1.000102340240,123.02020400,1.121212121212]]
  .map(numbers=>numbers.map(number=>number.toFixed(3)))
  .toString()
)

【讨论】:

【参考方案2】:

var array=[[123.55555,4.44444444,0.123455666],[12344.44444,7.77777777,8.8888101010]];
array=array.map(function(item)
  return item.map(function(num)
    return parseFloat(num.toFixed(2));
  );
);
console.log(array.toString());

【讨论】:

【参考方案3】:

你可以这样做:

const array = [[123.55555, 4.44444444, 0.123455666], [12344.44444, 7.77777777, 8.8888101010]];
const result = [].concat.apply([], array).map(n => n.toFixed(2)).toString();

console.log(result);

【讨论】:

以上是关于在控制浮点数精度的同时在javascript中将数组转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript为啥浮点数会丢失精度

解决JavaScript浮点数计算精度问题

JavaScript 浮点数运算的精度问题

如何使用Javascript使浮点数的精度相同

JavaScript 浮点数及运算精度调整总结

高效JS简化版