jQuery解析decimal小数值时小数位丢失问题咨询
问题原因
核心原因是JavaScript原生的parseFloat()方法仅认可点号.作为合法的小数分隔符,逗号,不属于JS数值字面量的合法组成字符,解析时碰到就会直接终止。
- 当输入值为
"12,34"时,parseFloat从字符串首位开始逐字符解析,成功读取到数字1、2后碰到逗号,判定后续内容不属于合法数字部分,直接返回已经解析完成的整数12,逗号后的34被完全丢弃。 - 你代码里的
.toFixed(2)是在parseFloat完成解析返回12之后才执行的,自然无法拿到丢失的小数部分。
修复方法
在调用parseFloat之前,先把作为小数分隔符的逗号替换为点号即可:
var vatPercentageString = $("#Price").val(); // 替换小数逗号为点号后再做解析 var validNumStr = vatPercentageString.replace(',', '.'); var percentage = parseFloat(validNumStr).toFixed(2);
注意:如果你的输入场景可能包含千分位格式的逗号(比如
1,234.56这类千位分隔写法),不要直接全局替换所有逗号,需要先根据业务规则区分千分位逗号和小数逗号再做处理,避免计算错误。
内容的提问来源于stack exchange,提问作者MTplus
相关产品推荐
相关产品推荐

