【问题标题】:value of 1.3 is becoming 1.40000001 in parsefloat1.3 的值在 parsefloat 中变为 1.40000001
【发布时间】:2019-04-13 10:26:25
【问题描述】:

我正在从 mongodb 读取一些值,然后我有一些增加价格的选项。有 2 种类型的选项单和多。如果单所有操作顺利运行。如果在我读取值时有多个(例如“1.3”),则解析浮点数返回 1.4000001 执行此操作的代码如下:

 this.item.productPrice = parseFloat(this.item.productPrice) - 
   parseFloat(a.price);

          this.item.productPrice = parseFloat(this.item.productPrice) + parseFloat(a.price);

在行 item.productPrice 的开头使用调试器是 1.3,但解析后变为 1.4000001 并添加 a.price

完整的代码块

//this one takes the selection and adds it to selectedparams array
  selected(ev: any) {
    debugger;
    const a = JSON.parse(ev);
    if (a.multiple) {
      if (Array.isArray(this.selectedparams[a.paramName])) {
        const va = !a.value;
        const index = this.objectinArray(this.selectedparams[a.paramName], {
          option: a.option,
          price: a.price,
          value: va
        });
        if (index !== -1) {
          this.item.productPrice = parseFloat(this.item.productPrice) - parseFloat(a.price);
          this.selectedparams[a.paramName].splice(index, 1);
          this.zone.run(() => {});
        } else {
          this.selectedparams[a.paramName].push({ option: a.option, price: a.price, value: a.value });
          this.item.productPrice = parseFloat(this.item.productPrice) + parseFloat(a.price);
          this.zone.run(() => {});
        }
      } else {
        this.selectedparams[a.paramName] = [];
        this.selectedparams[a.paramName].push({ option: a.option, price: a.price, value: a.value });
        this.item.productPrice = this.item.productPrice + parseFloat(a.price);
        console.log('hereeeeeeeeeeeeeeeee', this.item.productPrice);
        this.zone.run(() => {});
      }

    } else {
      this.selectedparams[a.paramName] = { selected: a.selected, price: a.price };
    }
    this.calcPrice();
  }

//this one dows the calculation after adding
  calcPrice() {
    const keys = Object.keys(this.selectedparams);
    console.log(this.item);
    let newprice = this.item.productPrice;
    keys.forEach(el => {
      if (Array.isArray(this.selectedparams[el])) {
        this.selectedparams[el].forEach((i: any) => {
          newprice = newprice + parseFloat(i.price);
        });
      } else {
        newprice = newprice + parseFloat(this.selectedparams[el].price);
      }
    });
    this.showPrice = newprice;
  }

【问题讨论】:

  • 在添加parseFloat(a.price) 之前,this.item.productPrice 的值是多少?
  • @gari this.item.productPrice 与 a.price 不同。 this.item.productPrice =1.3 a.price =0.10 总共变成 =1.5 如果我删除它 1.2

标签: angular typescript numbers parsefloat


【解决方案1】:

TLDR(math behind) - 你可以使用.toFixed() 函数:

var result = parseFloat('0.1') + parseFloat('1.3');
console.log(result.toFixed(1));​ // 1.4

var result = parseFloat('0.1') + parseFloat('1.3');
console.log(result);​ // 1.400000001

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多