打字稿强制转换为数字有效,但现在无效

时间:2018-08-04 12:52:51

标签: angular typescript

昨天我正在将一些字符串转换为数字,并且它们正在运行,但现在它们却没有(我什至做了一个承诺,认为一切都很好),我试图以任何其他方式进行转换,但是看起来还是Nan,看起来就像我分配变量的变量发生了什么事情一样(因为我在console.log中打印了它们,并且正在强制转换)...所以我在做什么错了?

代码如下:

  totalPrice: number;
  total: number;


if (this.cart_articles) {
            for (let article of this.cart_articles) {
              this.totalPrice += parseFloat(article.price);
              console.log(this.totalPrice); 
      console.log(parseFloat(article.price));


            }
            this.total = this.totalPrice + (this.totalPrice * 0.18);
            this.iva = this.totalPrice * 0.18;
          }

因此,我得到了变量total,totalPrice和iva的Nan。但是,在我使用console.log将值分配给变量之前显示它们的地方,它们还可以。我该如何解决?如您所见,很抱歉,我是新来的。

2 个答案:

答案 0 :(得分:0)

  

文档中的数字定义 :TypeScript中的所有数字都是浮动的   点值。这些浮点数获得类型号。

您应该使用unary '+' operator将字符串转换为数字
 另外,如果您使用parse函数将其设置为null,则它将变为NaN,但是如果您使用'+'运算符进行强制转换,则它将强制转换为0。

console.log(parseFloat(null)) // <-- NaN
console.log(+null) // <-- 0

答案 1 :(得分:0)

您必须使用默认值初始化totalPrice,否则它将为undefinedundefined +任何等于NaN的数字。

totalPrice= 0;
total = 0;

在侧节点上,您可以使用reduce使其更有效:

if (this.cart_articles) {
    this.totalPrice = this.cart_articles.reduce((totalPrice, article) => totalPrice += parseFloat(article.price), 0);
    this.total = this.totalPrice + (this.totalPrice * 0.18);
    this.iva = this.totalPrice * 0.18;
}