为什么 HTML 文本字段的值在有逗号时会发生变化

why the value of html text field get change when it has comma?

本文关键字:变化 文本 HTML 字段 为什么      更新时间:2023-09-26

我有以下函数来计算 CPM

函数 CalCPM(){

    var nv = document.getElementById('txtviews').value;
    var nc = document.getElementById('txtcost').value;
    var result =parseFloat(nc) / parseFloat(nv)/1000;
    if(!isNaN(result))
       {
        document.getElementById('cpm').value = result.toFixed(4); 
       }

}

当您在数字中输入逗号时,它工作正常,这意味着如果你投入TXTVIEWS 1000000在 TXT成本 3000 中,您会得到正确的结果,即 3.000

但是,如果您在任何数字中使用逗号,则问题开始了,例如

如果你投入TXTVIEWS 1,000,000在TXT成本3,000

那么结果将是 0.000003

这不是一个正确的值,知道为什么吗?

谢谢

parseFloat使用的数字格式不会将逗号识别为千位分隔符。之后的所有内容都将被忽略。

parseFloat("1,000,000")被视为与parseFloat("1P000P000");相同,即1

来自 MDN:

如果遇到符号(+或-)、数字(0-9)、小数点或指数以外的字符,它将返回该点之前的值,并忽略该字符和所有后续字符。

这应该有助于摆脱逗号并将您的值转换为数字

nc = parseFloat(nc.replace(/,/g, '')); //get rid of commas
nv = parseFloat(nv.replace(/,/g, ''));
var result = nc / nv/1000;

使用 reg-ex 这将是解决方案:

function CalCPM()
{
  var nv = (document.getElementById('txtviews').value).replace(/,/g,'');
  var nc = (document.getElementById('txtcost').value).replace(/,/g,'');
  var result =parseFloat(nc) / parseFloat(nv)/1000;
  if(!isNaN(result))
  {
  document.getElementById('cpm').value = Number(result).toFixed(4); 
  }
}