【问题标题】:Find highest number of decimal places in String [closed]查找字符串中的最高小数位数[关闭]
【发布时间】:2020-07-15 10:17:16
【问题描述】:

示例字符串可能如下所示:

    1. “3.0000+3”
    1. “3.00+3.00”
    1. “3.00+3.000”

我想从 1 个字符串中的数字中找出最多的小数位数

【问题讨论】:

  • 请附上你试过什么?
  • 我没有办法,这就是我要找的
  • 也许可以稍微修改一下您的问题。您不是在寻找小数点 - 您想要的是小数位数。

标签: javascript string string-comparison


【解决方案1】:

最直接的方法是遍历字符串,检查是否出现点,然后从那里开始计数直到下一个不是数字或字符串结尾的字符的位数。由于您的字符串包含多个数字,因此您需要添加一个包含最多小数位数的变量。 例如

var str = "3.00+3.000";

function getDecimalPlaces(numb) {
  var highest = 0;
  var counter = 0;
  for (a = 0; a < numb.length; a++) {
    if (numb.charAt(a - 1) == ".") {
      do {
        counter++;
        a++;
      }
      while (!isNaN(numb.charAt(a)) && a < numb.length);
    }
    if (counter > highest) {
      highest = counter;
    }
    counter = 0;
  }
  return highest;
}

console.log(str + " has " + getDecimalPlaces(str) + " decimal places");

通过将正则表达式.match() 方法结合使用,这可以变得更加优雅。这会在字符串中搜索给定模式并返回结果数组。

var str = "3.00+3.000";

console.log(str.match(/(\.)([0-9]+)/g));

这将返回一个数组,如:

[".00", ".000"]

通过比较它的元素的长度 - 因为它包括点而减 1 - 我们可以使用这个漂亮的短函数获得小数位数:

var str = "3.00+3.000";
var highest = str.match(/(\.)([0-9]+)/g).reduce(function(a, b) {
    return Math.max(a.length - 1, b.length - 1);
});
console.log(str + " has " + highest + " decimal places");

【讨论】:

  • 谢谢您的回答。我不想存储点的数量,我想存储点后的小数位数
  • 哇非常感谢您的回答,也感谢您的解释和正则表达式的更好变体
  • 没问题索菲亚 - 很高兴我能帮上忙。 =)
猜你喜欢
  • 2021-07-02
  • 2021-09-06
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多