簡體   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