这个让我很困惑。
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。)
非常感谢。
答案 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总长度,包括小数点之前。