编辑显然我误解了这个问题。当我试图回答时(至少在标题中)是关于有效数字。
此答案与Wikipedia's definition of significant digits 一致。它通过三个步骤解决了任意数量的有效数字的一般问题:
- 用 log10 计算位数(如果
-1<x<1 为负数,例如 5 表示 12345,或 -2 表示 0.01)
- 将数字四舍五入到正确的位置(例如,如果 x=12345 具有三位有效数字,则将 45 舍入为 00)
- 在右侧附加所需数量的零
仅此而已。除了零,它没有有效数字。 (当要求三个有效数字时,我选择了“0.00”,但 0 或 0.0 也可以)
function toStringWithSignificantDigits( x, len ){
if(x==0) return x.toFixed(len-1); // makes little sense for 0
var numDigits = Math.ceil(Math.log10(Math.abs(x)));
var rounded = Math.round(x*Math.pow(10,len-numDigits))*Math.pow(10,numDigits-len);
return rounded.toFixed(Math.max(len-numDigits,0));
}
function testIt(x,len){
console.log( "format " + x + " to " + len + " significant digits: " + toStringWithSignificantDigits(x,len));
}
testIt(12.345,6); // 12.3450
testIt(12.345,5); // 12.345
testIt(12.345,4); // 12.35
testIt(12.345,3); // 12.3
testIt(12.345,2); // 12
testIt(12.345,1); // 10
testIt(0.012345,7); // 0.01234500
testIt(0.012345,6); // 0.0123450
testIt(0.012345,5); // 0.012345
testIt(0.012345,4); // 0.01235
testIt(0.012345,3); // 0.0123
testIt(0.012345,2); // 0.012
testIt(0.012345,1); // 0.01
testIt(0,3); // 0.00, zero is a special case, as it has no significant digit