Javascript Regular Expression修复toPrecision(2)输出

时间:2015-09-12 02:43:52

标签: javascript regex

在通过num.toPrecision(2)之后,你可以得到123.45舍入到字符串1.2e + 2。

我能看到解决这个问题的最佳方法是:

num = 123.45;
num = num.toPrecision(2);

num = num.replace(/\.0e\+2/g, "00");
num = num.replace(/\.1e\+2/g, "10");
num = num.replace(/\.2e\+2/g, "20");
num = num.replace(/\.3e\+2/g, "30");
num = num.replace(/\.4e\+2/g, "40");
num = num.replace(/\.5e\+2/g, "50");
num = num.replace(/\.6e\+2/g, "60");
num = num.replace(/\.7e\+2/g, "70");
num = num.replace(/\.8e\+2/g, "80");
num = num.replace(/\.9e\+2/g, "90");

输出为1.2e + 2。我需要120(或970而不是9.7e + 2等)。

是否有一个javascript正则表达式表达式,并且不关心条件会输出到输出。基本上是在一条指令中做到这一点吗?

2 个答案:

答案 0 :(得分:0)

您可以通过除以适当的指数10,取消最低限度并重新乘以来更改精度。

function change_precision(n, prec) {
  var num_digits = Math.floor(Math.log10(n));
  var new_digits = num_digits - prec;
  var multiplier = Math.pow(10, new_digits);
  return Math.floor(n / multiplier) * multiplier;
}

> change_precision(11111000, 2)
< 11000000

> change_precision(123.45, 4)
< 123.4

答案 1 :(得分:-1)

如果要使用正则表达式,则可以更改以下所有正则表达式:

num = 123.45
num = num.toPrecision(2);    
num = num.replace(/\.(\d)e\+2/g, "$10") // "120"

如果您希望将num保留为数字,则只需再次转换数字,然后将其修复。

num = 123.45    
num = Number(num.toPrecision(2)) // 120

修改 修复num.toPrecision(1)

的大小写
num = 123.45
num = num.toPrecision(1);    
num = num.replace(/(?:\.)?(\d)e\+2/g, "$10") // "10"