精度が重要で、一貫した結果が必要な場合は、先頭の「0.」を含め、任意の数値の小数部分を文字列として返すいくつかの命題を次に示します。フロートとして必要な場合var f = parseFloat( result )
は、最後に追加してください。
小数部がゼロの場合、「0.0」が返されます。Null、NaN、および未定義の数値はテストされません。
1. String.split
var nstring = (n + ""),
narray = nstring.split("."),
result = "0." + ( narray.length > 1 ? narray[1] : "0" );
2. String.substring、String.indexOf
var nstring = (n + ""),
nindex = nstring.indexOf("."),
result = "0." + (nindex > -1 ? nstring.substring(nindex + 1) : "0");
3. Math.floor、Number.toFixed、String.indexOf
var nstring = (n + ""),
nindex = nstring.indexOf("."),
result = ( nindex > -1 ? (n - Math.floor(n)).toFixed(nstring.length - nindex - 1) : "0.0");
4. Math.floor、Number.toFixed、String.split
var nstring = (n + ""),
narray = nstring.split("."),
result = (narray.length > 1 ? (n - Math.floor(n)).toFixed(narray[1].length) : "0.0");
ここにjsPerfリンクがあります:https://jsperf.com/decpart-of-number/
命題#2が最速であることがわかります。
n = Math.floor(n);
非負の数値に対して希望する結果(整数部分)のみを返すことに注意してください