[英]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.