【问题标题】:How do I combine my two Javascript functions to allow three digit commas and one decimal point?如何组合我的两个 Javascript 函数以允许三位逗号和一位小数点?
【发布时间】:2019-01-07 19:13:59
【问题描述】:

我正在尝试将两个 Javascript 函数组合到一个代码中。第一个以“.commas”类为目标的函数在 3 位数字后插入一个逗号。第二个称为“函数floatKey”,最后两位数字前只允许一个小数点。

我尝试将“.commas”类函数插入第二个类函数并删除“event.preventDefault if 语句”,但结果是不确定的——它允许小数点后有更多数字以及逗号。它还删除了小数点前的所有逗号。我还允许“charCode 44”作为“函数 floatKey”中“if 语句”的例外,但它所做的只是显示并立即消失逗号插入。我将如何结合这两个功能使两者都工作?

我的代码:“.commas”类函数:

$(".commas").keyup(function(event){
  if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
  }
  var $this = $(this);
  var num = $this.val().replace(/,/gi, "");
  var num2 = num.split(/(?=(?:\d{3})+$)/).join(",");
  console.log(num2);
  $this.val(num2);
});

函数“floatKey”:

function floatKey(el, evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode;
    var number = el.value.split('.');
    if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
        return false;
    }
    if(number.length>1 && charCode == 46){
        return false;
    }
    var caratPos = getSelectionStart(el);
    var dotPos = el.value.indexOf(".");
    if( caratPos > dotPos && dotPos>-1 && (number[1].length > 1)){
        return false;
    }
    return true;
}

希望我把我的问题解释得够清楚了,谢谢你的帮助。

【问题讨论】:

  • 同时,在响应者消化代码并编写答案的同时,您可以将事件处理逻辑与字符串转换逻辑分开。这样你就可以更容易地推理你的问题。 (字符串转换你甚至可以很容易地测试)
  • 预期的输入和输出是什么? IE: 123456 变成 1,234.56 ?
  • @Twisty 是的 - 预期的输出应该是这样。
  • 或者更清楚地说,对于输入 - 当在输入字段中输入数字时,会在 3 位数字后自动插入一个逗号(第一个函数已经这样做了)。输入时会自动生成输出,如您的示例 1,234.56

标签: javascript jquery numbers decimal


【解决方案1】:

请看:Javascript Thousand Separator / string format

考虑以下内容。

$(function() {
  function formatFloat(nStr) {
    var result;
    var dec = nStr.indexOf(".");
    var x;
    if (dec > 0) {
      x = nStr.split(".");
      x[0] = parseInt(x[0]);
    } else {
      x = [];
      x.push(parseInt(nStr));
    }
    result = x[0].toLocaleString('en');
    if (dec > 0) {
      result = result + "." + x[1].slice(0,2);
    }
    return result;
  }
  $(".commas").keyup(function(e) {
    e.preventDefault();
    // Strip previous formatting
    var v = $(this).val().split(",").join("");
    // enter new formatting
    $(this).val(formatFloat(v));
    return false;
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Number: <input class="commas" type="text" /></p>

如果有小数点 . 点,我们将拆分字符串。我们可以使用.toLocaleString("en")来定位号码。

toLocaleString() 方法返回一个字符串,该字符串具有此数字的语言敏感表示。

这完成了所有繁重的逗号提升。然后,如果需要,我们会添加回十进制值。

希望对您有所帮助。

【讨论】:

  • 是的,这解决了一切。非常感谢您为我提供代码。你帮了我很多。对于迟到的回复深表歉意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多