私が書いているスクリプトでは、丸められた数字を表示する必要がありますが、小数点以下の数字は表示されません。私は3位に丸めてしまったが、JavaScriptのようにPHPのようにsubstr
の機能がないように、小数点以下を削除する方法についてはわからない。JavaScriptの整数を切り捨てるか丸めますか?
推奨事項
私が書いているスクリプトでは、丸められた数字を表示する必要がありますが、小数点以下の数字は表示されません。私は3位に丸めてしまったが、JavaScriptのようにPHPのようにsubstr
の機能がないように、小数点以下を削除する方法についてはわからない。JavaScriptの整数を切り捨てるか丸めますか?
推奨事項
あなたは文字列を持っている場合は、整数としてそれを解析:それ以外の場合は
var num = '20.536';
var result = parseInt(num, 10); // 20
、ECMAScriptの6 24+ Firefoxで、すでに利用可能な完全に一致切り捨てのための申し出Math.trunc
とエッジ:
var num = -2147483649.536;
var result = Math.trunc(num); // -2147483649
あなたがそれに頼ることができず、常に正の数を持つ場合は、もちろんMath.floor
を使用することができます:
var num = 20.536;
var result = Math.floor(num); // 20
最後に、[− 2147483648、2147483647]に数字がある場合、任意のビット演算子を使用して32ビットに切り捨てることができます。 | 0
は一般的であり、>>> 0
は、32ビットの符号なし整数取得するために使用することができます。
var num = -20.536;
var result = num | 0; // -20
負の数を-20.536とすると、切り捨てに間違った結果が得られます。-21 http://jsfiddle.net/zL1v5e2k/ –
数値を文字列に変換し、すべてのものを捨てます小数点の後に。
trunc = function(n) { return Number(String(n).replace(/\..*/, "")) }
trunc(-1.5) === -1
trunc(1.5) === 1
編集2013年7月10日
としてはminitechで指摘し、第二に、文字列の方法は少し過剰に思えるんと思いました。そうここにリストされている様々な方法の比較:以下のようにハードウェアに基づいて変化し得る結果は、
function trunc1(n){ return parseInt(n, 10); }
function trunc2(n){ return n - n % 1; }
function trunc3(n) { return Math[n > 0 ? "floor" : "ceil"](n); }
function trunc4(n) { return Number(String(n).replace(/\..*/, "")); }
function getRandomNumber() { return Math.random() * 10; }
function test(func, desc) {
var t1, t2;
var ave = 0;
for (var k = 0; k < 10; k++) {
t1 = new Date().getTime();
for (var i = 0; i < 1000000; i++) {
window[func](getRandomNumber());
}
t2 = new Date().getTime();
ave += t2 - t1;
}
console.info(desc + " => " + (ave/10));
}
test("trunc1", "parseInt");
test("trunc2", "mod");
test("trunc3", "Math");
test("trunc4", "String");
を、次のとおり
parseInt => 258.7
mod => 246.2
Math => 243.8
String => 1373.1
Math.floor/CEIL方法がわずかに速くよりさparseIntとmod。文字列は、他のメソッドと比較してパフォーマンスが低くなります。
ここに私の解決策を追加します。値が0とはceilを超えているとき、彼らはゼロ未満のとき、私たちは床を使用することができます。
function truncateToInt(x)
{
if(x > 0)
{
return Math.floor(x);
}
else
{
return Math.ceil(x);
}
}
その後:mozeyのtrunc2
機能とともに
y = truncateToInt(2.9999); // results in 2
y = truncateToInt(-3.118); //results in -3
なぜこの回答がダウンしたのか分かりません。唯一正しい方法です! – BlinkyTop
トラヴィスPessettoの答えはどのように考えると、唯一の正解でしたJavaScriptは、科学記法では非常に小さいか非常に大きな浮動小数点数を表します。
たとえば、parseInt(-2.2043642353916286e-15)
は、その入力を正しく解析しません。0
を返す代わりに、-2
を返します。
これはそれを行うには正しい(且つ少なくとも非常識私見)の方法である:
function truncate(number)
{
return number > 0
? Math.floor(number)
: Math.ceil(number);
}
私の場合、Math.trunc(-2.2043642353916286e-15)はゼロを返します。私はhttps://www.typescriptlang.org/play/でテストしました。 – Devid
丸めおよび切り捨ては2つの異なる動作です。あなたはどちらをしようとしていますか? –
'.substring()'は絶対にjavascriptの関数です。 –
**メソッドは '.toFixed()'と呼び出されます** – neaumusic