打字稿,toFixed。输入' string'不能指定类型'数字'

时间:2016-10-10 11:14:24

标签: angular typescript tofixed

       distanceX = ((this.frontclickedX  - originX) / originX).toFixed(2);
       distanceY = (-(this.frontclickedY - originY) / originY).toFixed(2);
       let distanceZ: number = (-(this.frontclickedY - originY) / originY).toFixed(2);

当我计算distanceZ:

时,我的浏览器会抛出错误
Type 'string' is not assignable to type 'number'.

前两行完美无缺,但第三行并不真正有效。 正如您所看到的,它甚至与distanceY完全相同。我试图首先解析Flos()。但后来它开始抱怨我只能将一个字符串解析为浮点数,并且我没有提供一个字符串。

此刻我很困惑,所以非常感谢一些帮助或解决方案!

提前致谢!

编辑:我试图简化我的代码。 使距离变得私密,并增加了制定者和吸气剂。

private _distanceX: number;
private _distanceY: number;
private _distanceZ: number;

  get distanceZ(): number {
    return this._distanceZ;
}
set distanceZ(value: number) {
    this._distanceZ = value;
} ...
calculateBadgeDistance(): void{
        this.distanceX = (5.001).toFixed(2);
        this.distanceY = (5.001).toFixed(2);
        this.distanceZ = (5.001).toFixed(2);
}

现在我收到了所有3行的错误。

3 个答案:

答案 0 :(得分:12)

方法toFixed()将数字转换为字符串。 您必须将变量解析为数字:

let distanceZ:number = parseFloat((-(this.frontclickedY - originY) / originY).toFixed(2));

或者临时存储字符串,稍后再解析

let distanceZTxt:string = (-(this.frontclickedY - originY) / originY).toFixed(2);
let distanceZ:number = parseFloat(distanceZTxt);

答案 1 :(得分:0)

您可以像这样编写函数来避免此问题

get distanceZ(): number | string {
    return this._distanceZ;
 }

在函数中添加“ |字符串”

答案 2 :(得分:0)

尝试一下

((this.frontclickedX  - originX) / originX).toFixed(2) as any