【问题标题】:Javascript under-the-hood toString conversionJavascript 底层 toString 转换
【发布时间】:2015-06-29 12:24:57
【问题描述】:

我有以下功能:

function addChange(result, bill) {
  for (var i=0;i<result.length;i++) {
    if (result[i][0] === bill[0]) {
      result[i][1] = parseFloat(result[i][1]).toPrecision(2) + parseFloat(bill[1]).toPrecision(2);
      return result;
    }
  }
  result.push(bill);
  return result;
}

如下调用,例如:

result = [["QUARTER", 0.25],["DIME", 0.10]];
bill = ["QUARTER", 0.25];
addChange(result, bill);

上面的输出是:

[["QUARTER", "0.250.25"], ["DIME", 0.10]] 

为什么 javascript 在添加之前将这些浮点数转换为字符串?还是有其他事情发生?我怎样才能超越它并实现我想要的,即对于上面的例子:

[["QUARTER", 0.50], ["DIME", 0.10]]

【问题讨论】:

  • 使用Math.round(parsedFloat*100)/100
  • @Shashank 你将如何强制 javascript 准确处理任何 2 个小数精度浮点数?
  • 我会使用在使用toFixed/toPrecision 后跟数字类型转换和Math.round 乘法和除法之间更快的方法。我还没有测试过性能,所以我不确定哪种方法会更好。

标签: javascript string floating-point addition


【解决方案1】:

问题是:

floatNumber.toPrecision(2)

这会根据您的号码创建一个字符串。 toPrecision-函数用于创建具有固定位数的号码的表示

【讨论】:

    【解决方案2】:

    来自 mdn 文档https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Number/toPrecision

    返回

    以定点或指数表示法表示 Number 对象的字符串,四舍五入到精确有效数字。请参阅 Number.prototype.toFixed() 方法的描述中关于舍入的讨论,该方法也适用于 toPrecision()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2019-06-29
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多