Edge浏览器中出现意外的toPrecision()行为

时间:2017-10-10 12:06:30

标签: javascript microsoft-edge

这个让我很困惑。

var a = 0.0003;
var b = a.toPrecision(3);

我期待b成为" 0.000300",这正是我在Firefox,IE和Chrome中所获得的。但不是在Edge。 Edge给了我" 0.000200"。

任何人都知道发生了什么?

如果有人想看看,请点击此处:http://jsfiddle.net/dajp/2b47qLg0/

(如果有所作为,我使用Edge 40.15063.0.0和EdgeHTML 15.15063。)

非常感谢。

1 个答案:

答案 0 :(得分:1)

这可能不是最好的方法,但它可以解决边缘问题。

这只是对jsfiddle的javascript的修改:

runWeirdness = function() {
a = 0.0003;
b = a.toFixed(3 + decimalPlaces(a));
document.getElementById("para").innerHTML = "Answer is: " + b;
}

function decimalPlaces(num) {
  var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
  if (!match) { return 0; }
  return Math.max(
       0,
       // Number of digits right of decimal point.
       (match[1] ? match[1].length : 0)
       // Adjust for scientific notation.
       - (match[2] ? +match[2] : 0));
}

toFixed()toPrecision()之间的基本区别在于toFixed(n)提供小数点后的第n个长度,toPrecision(x)提供x总长度,包括小数点之前。