首页 > 解决方案 > parseFloat 将数千变成个位数 - 出乎意料

问题描述

我有一个奇怪的情况。

我有一个对象数组......每个对象都有一个.value.rate字段,我将它们加在一起。

例如, let quoteSelections = ["$4,000", "$0.00"]

为此,我在 react 中使用了 useEffect 挂钩 - 每次速率变化时,它都会将其加起来。问题是,任何比具有数百个位置的数字更大的东西都会恢复为个位数 - 所以“4000”变成了数字4

  useEffect(() => {
    if (quoteSelections.length > 0) {
      let rateTotal = quoteSelections
        .map((selec) => parseFloat(selec.value.rate.slice(1)))
        .reduce((a, b) => a + b);
      if (rateTotal > 0) {
        setEstimate(rateTotal);
      } else {
        setEstimate(0);
      }
    }
  }, [quoteSelections]);

如果quoteSelections = ["$400", "$0.00"]它工作正常。但任何高于 999 的值都会使其恢复为个位数。

标签: javascriptreactjsuse-effect

解决方案


这是因为您的字符串中的逗号,parseFloat不知道如何处理,请参阅文档

如果 parseFloat 遇到除加号 (+)、减号 (-U+002D HYPHEN-MINUS)、数字 (0–9)、小数点 (.) 或指数(e 或 E)以外的字符,则返回值直到该字符,忽略无效字符及其后面的字符。

我假设您的工作输入不包含美元符号,因为这也会导致它不起作用。


推荐阅读