嗨专家, 我有一个要求,我认为正则表达式可能有助于减少代码中的大量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
答案 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