如何编写javascript代码以获得十进制后的三位有效数字

时间:2015-05-11 08:04:06

标签: javascript

我要求格式化一个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

3 个答案:

答案 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);

我认为这就是重要的数字逻辑。