我要求格式化一个no以获得javascript后十进制后的3位有效数字。
有关有效数字的详细信息,请参见http://www.usca.edu/chemistry/genchem/sigfig.htm
这是有效数字的规则
1)所有非零数字(1,2,3,4,5,6,7,8,9)总是很重要。
2)非零数字之间的所有零都是重要的。
3)所有零,同时在小数点的右边和 数字的结尾总是很重要。
4)写入小数点左边的所有零并且数字> = 10都是重要的。
我希望功能如此 function significantDigit(no,noOfDecimal) { 返回显着没有 }有效数字示例。 48,923有5位有效数字。显着数字(不,3)应该返回48923 3.967有四个有效数字。显着数字(不,3)应该返回3.967 0.00104009有六位有效数字,.. significantDigit(no,3)应返回.00104
答案 0 :(得分:0)
希望这会有所帮助
var anumber=123.45
anumber.toPrecision(6) //returns 123.450 (padding)
anumber.toPrecision(4) //returns 123.5 (round up)
anumber.toPrecision(2) //returns 1.2e+2 (you figure it out!)
感谢编辑过的问题 这个将解决您的要求
var anumber = 123.4050877
var str = anumber.toPrecision(6)
var a = [];
a= JSON.parse("[" + str + "]");
alert(a.length)
for(var i=6;i<=a.length;i--){
if(a[i]=="0"){
a.splice(i, 1);
}
}
alert(a)
答案 1 :(得分:0)
这可能不是完整的解决方案..但它的最大程度上是正确的(我认为)它非常适用于非常大的十进制数。这将为您提供十进制后的最高有效数字
function signiDigit(val, noOfdecimalPoint) {
debugger;
var noString = String(val);
var splitNo = noString.split(".");
if (splitNo.length > 1) {
if(parseInt(splitNo[0])!==0 ||splitNo[0]==='' )
{
if(noString.length - 1 > noOfdecimalPoint)
{
return Math.round(val);
}else
{
return val;
}
}else
{
var noafterDecimal =String(parseInt(splitNo[1]));
if(noafterDecimal.length > noOfdecimalPoint)
{
return parseFloat(val.toFixed(splitNo[1].indexOf(noafterDecimal) + noafterDecimal.length-1));
}
else{
return val;
}
}
}}
var no = signiDigit(9.999,3);
alert(no);
这里是fiddeler链接http://jsfiddle.net/n1gt4k90/4/
这不是完全重要的,只有重要和四舍五入的混合。
答案 2 :(得分:0)
我在这里找到了一个java代码感谢Pyrolistical
Rounding to an arbitrary number of significant digits
booking
我已将此转换为javascript代码,可在http://jsfiddle.net/f6hdvLjb/4/找到 javascript代码是
public static double roundToSignificantFigures(double num, int n) {
if(num == 0) {
return 0;
}
final double d = Math.ceil(Math.log10(num < 0 ? -num: num));
final int power = n - (int) d;
final double magnitude = Math.pow(10, power);
final long shifted = Math.round(num*magnitude);
return shifted/magnitude;}
} roundToSignificantFigures(6666666.0412222919999,3);
我认为这就是重要的数字逻辑。