2015-05-11 27 views
0

我有一個要求格式化沒有在JavaScript中的小數點後拿到3顯著位..如何編寫JavaScript代碼來得到三個顯著位小數點後

詳細介紹了顯著位可以在這裏找到http://www.usca.edu/chemistry/genchem/sigfig.htm

這裏是有效數字的規則

1)所有非零數字(1,2,3,4,5,6,7,8,9)始終是重要的。

2)非零數字之間的所有零總是顯着的。

3)所有零都同時在小數點右邊,並且在 數字的末尾總是顯着的。

4)所有寫在小數點左邊並且數字> = 10的零總是有意義的。

我想功能等功能 significantDigit(無,noOfDecimal) { 返回signifcantNo }的顯著數字

實施例。 48,923有五位有效數字。顯着數字(不,3)應該返回48923 3.967有四位有效數字。顯着數字(不,3)應該返回3.967 0.00104009有六位有效數字,.. significantDigit(no,3)should返回0.00104

+0

最後例如違反第二條規則 – kavinhuh

+0

只是沒有得到如何寫它的邏輯。 –

+0

查看編輯答案 – kavinhuh

回答

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!) 

感謝編輯的問題 這一個LL解決您的要求

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) 
+0

抱歉,這不是重要的數字。例如。 123.45有兩個有效數字,它應該只顯示123.45 ..不是額外的零.. –

+0

我已更新我的問題plz檢查的細節 –

+0

請檢查這個號碼..8.1000它有5個有效數字..如果我說給我3位有效數字後,它應該返回8.100 –

0

,這可能不是完整的solution..but其正確的最大程度(我覺得)它適用於非常大的十進制no..this真正偉大會給你小數點後

 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/

這不是完全重要的,但重要的和四捨五入的組合。

0

我發現這裏一個Java代碼由於Pyrolistical

Rounding to an arbitrary number of significant digits

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;} 

我已轉換這一個JavaScript代碼,這可以在http://jsfiddle.net/f6hdvLjb/4/ JavaScript代碼是

function roundToSignificantFigures(num, n) { 

if(num === 0) { 
    return 0; 
} 

var d = Math.ceil(Math.log10(num < 0 ? -num: num)); 
var power = n - parseInt(d); 

var magnitude = Math.pow(10, power); 
var shifted = Math.round(num*magnitude); 
alert(shifted/magnitude); 

return shifted/magnitude; 
可以找到

} roundToSignificantFigures(6666666.0412222919999,3);

我認爲這是什麼顯着的數字邏輯。

相關問題