2015-07-02 81 views
0

我需要根據小數部分後的位數來驗證數字。檢查小數部分後的位數

我使用成功下面的代碼,但是,我想知道:

  • 是否有另一種更好的方法來達到同樣的效果?也許使用一些本地數學功能。

注:我知道正則表達式,但我正在尋找一種數學方法。

var max = 2; // max number of digits after decimal places 
 
     var value = 10.154; 
 
     var s = value.toString().split('.') 
 
     if (s[1].length > max) { 
 
      alert('invalid'); 
 
     } else { 
 
      alert('ok'); 
 
     }

+0

浮點數只是近似值。所以,值「10.154」本身可能不會被存儲爲「10.154」。你爲什麼做這個? – thefourtheye

+0

假設價值將由用戶提供,我認爲你的解決方案已經足夠好了。 – Riddler

回答

1

我相信這是做它,因爲沒有內置的JavaScript函數將實現你想要的東西的最佳方式。該解決方案將工作無處不在,除了在歐洲大陸,他們使用的小數,而不是一段逗號(,)分隔符(。)

你也可以做到這一點,但它不會爲負數

var value = 10.154; 
value = Math.abs(value); 
var decimal = value - Math.floor(value) 
var length = decimal.toString().length; 
+0

這仍然不會讓你的位數,我不知道一個數字有一個長度屬性... – DvS

+0

@DvS編輯我應該解決這個問題。將數字轉換爲一個字符串,然後抓住長度 – urnotsam

+0

對,做得好 – DvS

-1
工作

確定位數時,需要將一個數字作爲字符串處理。所以你需要做一些類似於你正在做的事情。或者只是使用.toFixed()來擺脫額外的數字。

-1

在計算機中,數字有一個整數浮點小數。所以10.154實際上是10.15400000000(無論語言的準確程度如何)。

所以,如果你想檢查它是否有>最大十進制值,那麼你去: 你將乘以10^x整個值,然後模數1它。如果它不是0,那麼你有更多的假數值比你設定的最大值。

所以每次你的例子10.154(3個小數點)* 10^2(你最大)= 1015.4 1015.4%1 = 0.4如此 「無效」