2017-06-05 477 views
0

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

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

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

regex1的应该检查的数量是否在所有有任何小数点。如果是这样的话,它应该检查小数点后面的值是否不只是零(例如,有时数量没有得到格式化,小数点的全长145.000,在我们的例子中应该在UI中显示为145,控制因子D不需要考虑)。也正则表达式应该考虑像数量值“0.590" ,” 0.001" 等

由于我是新来的正则表达式,我挣扎着拿出一个表达

我设法让一个非常基本的正则表达式,只是检查“。”在数量和“”之后的所有数值之内。 RegEx = /[.]\d*/g

如果RegEx1返回肯定结果。那么Regex2现在应该检查值D.它应该根据D来调整小数点。例如,如果D = 3和数量= 345.26那么正则表达式2的输出应该给出345.260,并且类似地是D = 1,那么数量应该是345.3 donno是否可以使用正则表达式舍入,没有舍入的解决方案也可以)。

问候, Bince

+0

一般情况下,这是一个坏主意,使用正则表达式来操作和数字的格式。 – 2017-06-05 11:19:12

回答

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); \t \t //this does the truncation 
 
    var padding = "0".repeat(control - decPart.length); \t //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));

+0

非常感谢答案:),我将这些数量显示为字符串,它是UI中的只读字段。所以你的解决方案将适合我的场景。 –

+0

您正在重新实施标准且经过充分测试的原生方法。这个实现不会四舍五入到最接近的小数:'round('123.256',2); //预期(“123.26”)但得到(“123.25”)。我建议你这样做:'函数round(num,decimals){return Number(num).toFixed(decimals)}' – Hitmands

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

+0

我认为OP与字符串有关,而不是数字,否则他不会要求定期表达式。 – horcrux

+0

'Number(“126.768”)。toFixed(2)'这应该有助于处理字符串... – Hitmands

+0

@horcrux但他处理的字符串表示数字。 – 2017-06-05 11:19:47