javascript - 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 的值都会使其恢复为个位数。
解决方案
这是因为您的字符串中的逗号,parseFloat
不知道如何处理,请参阅文档:
如果 parseFloat 遇到除加号 (+)、减号 (-U+002D HYPHEN-MINUS)、数字 (0–9)、小数点 (.) 或指数(e 或 E)以外的字符,则返回值直到该字符,忽略无效字符及其后面的字符。
我假设您的工作输入不包含美元符号,因为这也会导致它不起作用。
推荐阅读
- node.js - 使用 docker 为 restfull 节点 api 构建节点映像
- node.js - 运行nodejs程序时出错
- javascript - It seems onChange="myFunction()" is only calling my function once?
- angularjs - 垫表中行的 ElementRef
- python - 具有多个 one-hot 数组的 Keras 模型的输入形状
- php - 如何将 PayPal 表单集成到 wordpress 网站中?
- c++ - 将可变参数解析为函数指针
- java - 我应该如何重写此代码以使用访问令牌连接到 Netsuite?
- javascript - 分页显示 5 页并隐藏其余页面
- c++ - 为什么 std::filesystem::path::root_name() 返回空字符串?