小数的正则表达式

时间:2017-06-05 10:24:35

标签: javascript regex regex-group

嗨专家,                    我有一个要求,我认为正则表达式可能有助于减少代码中的大量if语句和条件。 我的要求是这样的 我有一个显示在UI(JavaScript)中的数量字段,它具有从后端发送的控制因子(基于数量字段的测量单位)。

示例我的数量=“126.768” 控制因子D =“2”(表示小数点后的显示位置数为2)。

现在我需要一个正则表达式来找到以下

Regex1应该检查数量是否有任何小数点。如果是这样,那么它应该检查小数点后面的值是否不仅仅是零(有时数量是没有用小数点的全长145.000进行格式化,在我们的例子中应该在UI中显示为145和控制因子D不需要考虑)。此外,RegEx应考虑数量值,如“.590”“。001”等。

由于我是RegEx的新手,我很难想出一个表达式

我设法做了一个非常基本的RegEx,只检查“。”在“。”之后的数量和所有值内。 RegEx = / [。] \ d * / g

如果RegEx1返回肯定结果。然后Regex2现在应该检查值D.它应该根据D调整小数点。例如,如果D = 3且数量= 345.26,那么regex2的输出应该给出345.260,同样地,D = 1则数量应该是345.3(不知道使用RegEx是否可以进行舍入,没有舍入的解决方案也很好。

此致 Bince

2 个答案:

答案 0 :(得分:0)

第一个正则表达式是

"\d*\.\d*[1-9]\d*"

它在点后搜索至少1个非零数字。

对于第二点,只有当数字克服了控制因子时才能使用正则表达式进行舍入,而对于0填充,则不能使用正则表达式:

function round(num, control) {
  var intPart = num.split(".")[0];
  var decPart = num.split(".")[1];
  decPart = decPart.substring(0, control);		//this does the truncation
  var padding = "0".repeat(control - decPart.length);	//this does the 0-padding
  return intPart + "." + decPart + padding;
}

var num1 = "210.012";
var num2 = "210.1";
var control = 2;
console.log(round(num1, control));
console.log(round(num2, control));

答案 1 :(得分:0)

你不需要任何支票或正则表达式, 有一个Number.prototype.toFixed方法可以帮助您调整小数。

它基本上将number舍入到最近的decimal point并返回一个字符串。如果您正在使用字符串,请确保之前使用字符串(使用Number静态)

console.log(17.1234.toFixed(2)); // round it down
console.log(17.1264.toFixed(2)); // round it up
console.log(17..toFixed(2)); // Integer
console.log(Number("126.768").toFixed(2)); // from string casting