toFixed() 方法工作不在 javascript 中的 number() 方法内?

问题描述

我想要的:计算后的结果应该是2个十进制格式。

这是我的代码

let totalNetWeightLocal = 0;

totalNetWeightLocal = totalNetWeightLocal + Number((parseFloat(item.netWeight) * parseInt(item.quantity)).toFixed(2));

问题: 计算有效,但 toFixed() 无效。我得到的结果超过 2 个十进制值。

有人可以帮我吗?

解决方法

您的代码的问题是,.toFixed(2) 的位置错误

您的代码所做的类似于

const fullWeight = parseFloat(item.netWeight) * parseInt(item.quantity)
totalNetWeightLocal = totalNetWeightLocal + fullWeight.toFixed(2));

这意味着,您将两个字符串相加,例如 0 + '10.24',即 010.24。您需要做的是:

// you don’t need Number() here:
const itemWeight = parseFloat(item.netWeight) * parseInt(item.quantity)
totalNetWeightLocal += itemWeight;
totalNetWeightLocal.toFixed(2);

考虑到,您可能有一个可以编写函数的项目列表,如下所示:

const items = [
  { netWeight: '4.53',quantity: '3' },{ netWeight: '20.33',quantity: '10' }
];

const getTotalNetWeightLoal = items => {
  const totalNetWeightLocal = items.reduce(
    (weight,{ netWeight,quantity }) =>
      weight + parseFloat(netWeight) * parseInt(quantity),0
  );

  return totalNetWeightLocal.toFixed(2);
};

console.log(getTotalNetWeightLoal(items));
,

试试这个代码。您的代码运行良好。

let item = { "netWeight": "5.99498","quantity": '8' }
    let totalNetWeightLocal = 0;
    totalNetWeightLocal = totalNetWeightLocal + Number((parseFloat(item.netWeight) * parseInt(item.quantity)).toFixed(2));
    console.log(totalNetWeightLocal) // output: 47.96

//Can you provide cases where it failed?