web-dev-qa-db-ja.com

JavaScriptで数値の小数を取得する最も簡単な方法

私の例よりも数字の小数の数を計算するより良い方法はありますか?

var nbr = 37.435.45;
var decimals = (nbr!=Math.floor(nbr))?(nbr.toString()).split('.')[1].length:0;

つまり、ネイティブJavaScript関数の実行や使用の高速化を意味します。 nbr.getDecimals()のようなもの。

前もって感謝します!

編集:

Series0neの回答を変更した後、管理できる最速の方法は次のとおりです。

var val = 37.435345;
var countDecimals = function(value) {
    if (Math.floor(value) !== value)
        return value.toString().split(".")[1].length || 0;
    return 0;
}
countDecimals(val);

速度テスト: http://jsperf.com/checkdecimals

27
PhilTrep
_Number.prototype.countDecimals = function () {
    if(Math.floor(this.valueOf()) === this.valueOf()) return 0;
    return this.toString().split(".")[1].length || 0; 
}
_

プロトタイプにバインドされている場合、これにより、数値変数から直接小数(countDecimals();)を取得できます。

例えば。

_var x = 23.453453453;
x.countDecimals(); // 9
_

数値を文字列に変換し、で分割して配列の最後の部分を返すか、配列の最後の部分が未定義の場合は0を返します(小数がない場合に発生します)ポイント)。

これをプロトタイプにバインドしたくない場合は、これを使用できます。

_var countDecimals = function (value) {
    if(Math.floor(value) === value) return 0;
    return value.toString().split(".")[1].length || 0; 
}
_
63
series0ne

あなたがコードに整数のエラーをスローさせず、小数がないときに0の結果を取得したい場合は、series0ne答えに追加してください:

var countDecimals = function (value) { 
    if ((value % 1) != 0) 
        return value.toString().split(".")[1].length;  
    return 0;
};
22
Pete D

正規表現は、計算において非常に効率的ではありません。別の方法に進むことができれば意味があります。だから私はそれらを避けるだろう:)

「Number%1」のようなものは、丸められた10進値(2.3%1 = 0.2999999999999998)を返します。一般的な方法で、できるだけ早く文字列を使用することをお勧めします。

それで、あなたは大丈夫ですが、私はそれを最適化する方法を探します。

編集:

function CountDecimalDigits(number)
{
  var char_array = number.toString().split(""); // split every single char
  var not_decimal = char_array.lastIndexOf(".");
  return (not_decimal<0)?0:char_array.length - not_decimal;
}
1
Ricola3D