繁体   English   中英

错误:使用 toFixed() 无法将类型“字符串”分配给类型“数字”

[英]Error: Type 'string' is not assignable to type 'number' with toFixed()

我有简单的 function 计算表中列中的数字和字符串的总和。 总和效果很好,给了我结果。 问题是总和有很多小数位,我想将其转换为 2 位小数,每当我尝试

return sum.toFixed(2);

我最终得到一个错误。

类型“字符串”不可分配给类型“数字”。

某些列的总和示例

615.7142868041998, 0,10, 34.0476188659667, 14.761905193328857

到目前为止我所拥有的。 表列包含整数和字符串,我使用减速器 function 只获取数字

getSum(columnNumber) {
    let sum = 0;
    const columnNumberToPropertyMap = [
      "id",
      "teamNumber",
      "rural",
      "completed",
      "entirehouseholdabsent",
      "postponed",
      "refused",
      "vacant",
      "dwelling"     
    ];
    const property = columnNumberToPropertyMap[columnNumber];
    return this.rural.reduce((acc, curr) => {
      //const adder = Number(curr[property]) || 0;
      const adder = isNaN(Number(curr[property])) ? 0 : Number(curr[property]);
      sum = acc + adder
      return sum.toFixed(2);
    }, 0);
  }

如何将总和转换为小数点后 2 位。 我试过 pipe 结果在 html | number: '1.2-2' | number: '1.2-2'它也不起作用。 先感谢您

如果要在所有数字相加后执行 .toFixed,请在 reduce 之后粘贴:

return this.rural.reduce((acc, curr) => {
  //const adder = Number(curr[property]) || 0;
  const adder = isNaN(Number(curr[property])) ? 0 : Number(curr[property]);
  sum = acc + adder
  return sum;
}, 0).toFixed(2);

.toFixed()number转换为string ,这就是您收到错误的原因。 您可以将其转换回数字,例如

parseFloat(sum.toFixed(2))

您还可以创建一个实用程序 function 像

const formatDecimalNumber = (
    num: number,
    decimalPlacesToKeep = 2,
): number => parseFloat(num.toFixed(decimalPlacesToKeep))

更新

正如评论中所指出的,这不是一个完美的解决方案。 这一切都来自浮点数学的复杂性(不仅限于JavaScript )。 在这个线程中有很好的讨论。

另一方面, .toFixed()更像是一个实用程序 function,它会四舍五入和/或调整数字以便于表示。 请参阅此处的文档

此处讨论了此方法的一些替代方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM