Javascript 边缘浏览器中出现意外的toPrecision()行为

Javascript 边缘浏览器中出现意外的toPrecision()行为,javascript,microsoft-edge,Javascript,Microsoft Edge,这个真让我困惑 var a = 0.0003; var b = a.toPrecision(3); 我原以为b是“0.000300”,这正是我在Firefox、IE和Chrome中得到的。但不是在边缘。Edge给了我“0.000200” 有人知道发生了什么吗 如果有人想看一看,请点击这里: (如果有区别,我将Edge 40.15063.0.0与EDGEHTML15.15063一起使用。) 非常感谢。这可能不是最好的方法,但它解决了边缘问题 这只是对JSFIDLE的javascript的修改:

这个真让我困惑

var a = 0.0003;
var b = a.toPrecision(3);
我原以为b是“0.000300”,这正是我在Firefox、IE和Chrome中得到的。但不是在边缘。Edge给了我“0.000200”

有人知道发生了什么吗

如果有人想看一看,请点击这里:

(如果有区别,我将Edge 40.15063.0.0与EDGEHTML15.15063一起使用。)


非常感谢。

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

这只是对JSFIDLE的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个总长度,包括小数点之前。

非常感谢。。。此后,我还发现了另一种方法,这种方法对于我的目的来说足够精确,而且更简单:如果我使用“toPrecision(a+a*1e-6)”而不是“toPrecision(a)”,那么Edge会给出我期望的答案。因为在我的应用程序中,我从来没有将“a”设置为0.029997这样的值,我认为我可以侥幸逃脱,尽管这是一个可怕的预兆,我仍然不明白为什么会发生这种情况。我更喜欢你的方法。是的,如果所有的浏览器都一样,那么网络开发人员的生活会简单得多,但有趣得多。