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

当我计算距离 Z 时,我的浏览器抛出错误:

Type 'string' is not assignable to type 'number'.

前两行完美运行,但第三行并没有真正起作用。如您所见,它甚至与 distanceY 的计算完全相同。我首先尝试 parseFloat() 它。但随后它开始抱怨我只能将一个字符串解析为一个浮点数,而我没有提供一个。

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

提前致谢!

编辑:我试图简化我的代码。将距离设为私有,并添加了 setter 和 getter。

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 行都得到了错误。

4

3 回答 3

28

该方法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);
于 2016-10-10T11:33:27.790 回答
0

尝试这个

((this.frontclickedX  - originX) / originX).toFixed(2) as any
于 2019-10-24T15:51:53.490 回答
0

你可以这样写你的函数来避免这个问题

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

在您的函数中添加“| string”

于 2019-04-06T06:09:43.407 回答