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