除算の結果があり、結果の数値の小数部分を破棄したいと思います。
これどうやってするの?
除算の結果があり、結果の数値の小数部分を破棄したいと思います。
これどうやってするの?
回答:
あなたは使うことができます...
Math.trunc()
(小数部分を切り捨て、以下も参照)Math.floor()
(切り捨て)Math.ceil()
(切り上げする) Math.round()
(最も近い整数に丸める)...小数点を削除する方法に依存します。
Math.trunc()
すべてのプラットフォーム(IE)ではまだサポートされていませんが、簡単にポリフィルを使用できますが、当面の間を。
優れたプラットフォームサポートで小数部分を切り捨てる別の方法は、ビットごとの演算子(.eg |0
)を使用することです。数値にビット演算子を使用することの副作用は、そのオペランドを符号付き32ビット整数として扱うため、小数部分が削除されることです。これは32ビットを超える数値も処理することに注意してください。
また、浮動小数点演算での10進数の丸めの不正確さについて話しているかもしれません。
> (2.305*100)|0 > 230 > (2.3*100)|0 > 229
2.3*100
javascript の結果は229.99999999999997
であるため、例ではビット演算子が正しく機能しているようです。
|0
64ビット整数を使用する同様のソリューションはありますか?
ビットごとの演算子を使用して、小数を切り捨てることもできます。
例えば
var x = 9 / 2;
console.log(x); // 4.5
x = ~~x;
console.log(x); // 4
x = -3.7
console.log(~~x) // -3
console.log(x | 0) // -3
console.log(x << 0) // -3
ビット演算は、数学関数よりもかなり効率的です。ダブルビット単位のないオペレータはまた少し上回るようだx | 0
とx << 0
無視できる程度の量でビット演算を。
// 952 milliseconds
for (var i = 0; i < 1000000; i++) {
(i * 0.5) | 0;
}
// 1150 milliseconds
for (var i = 0; i < 1000000; i++) {
(i * 0.5) << 0;
}
// 1284 milliseconds
for (var i = 0; i < 1000000; i++) {
Math.trunc(i * 0.5);
}
// 939 milliseconds
for (var i = 0; i < 1000000; i++) {
~~(i * 0.5);
}
また、注目に値するのは、ビット単位のnot演算子が算術演算よりも優先されるため、意図した結果を得るには、計算を括弧で囲む必要がある場合があることです。
x = -3.7
console.log(~~x * 2) // -6
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7
console.log(~~(x * 2)) // -7
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7
double bitwise not演算子の詳細については、Double bitwise NOT(~~)を参照してください。
あなたもすることができます
parseInt(a/b)
parseInt
これは、最初に引数を文字列に変換することで機能するため、大きな数では確実に機能しないことに注意してください。大きな数では、結果は指数表記を使用します。たとえば、var n = 22222222222222222222222; parseInt(n);
はを返す2
ため、がn.toString()
返されます2.2222222222222223e+22
。
parseInt()
、文字列内の数値を取得してを返すという目的で使用していませんNumber
。
uは、次のコードを使用して、小数点以下の特定の桁数(ここでは2桁)を表示することもできます。
var num = (15.46974).toFixed(2)
console.log(num) // 15.47
console.log(typeof num) // string
Math.round()
関数を使用します。
Math.round(65.98) // will return 66
Math.round(65.28) // will return 65
$.round = Math.round
;)
を使用しMath.round()
ます。
(アレックスの答えはより良いです;私は仮定をしました:)
ES2015では、Math.trunc()を使用できます。
Math.trunc(2.3) // 2
Math.trunc(-2.3) // -2
Math.trunc(22222222222222222222222.3) // 2.2222222222222223e+22
Math.trunc("2.3") // 2
Math.trunc("two") // NaN
Math.trunc(NaN) // NaN
IE11以前ではサポートされていませんが、Edgeや他のすべての最新ブラウザーで機能します。
Math.trunc(value * Math.pow(10,x)) / Math.pow(10,x)
でしょうか?
value = 2.3
、そしてx = 2
戻り2.29
ます。これ以上の提案はありません。
toFixedはラウンドのように動作します。
床のような動作の場合、%を使用します。
var num = 3.834234;
var floored_num = num - (num % 1); // floored_num will be 3
上記の投稿の助けを借りて、詳細な説明の圧縮があります:
1. Math.trunc():ドットが後に続く数字を削除するために使用されます。暗黙的に変換します。ただし、IEではサポートされていません。
例:
Math.trunc(10.5)// 10
Math.trunc(-10.5)// -10
その他の代替方法:ビットごとの否定演算子の使用:
例:
x = 5.5
~~ x // 5
2. Math.floor():可能な最小の整数値を与えるために使用されます。すべてのブラウザでサポートされています。
例:
Math.floor(10.5)// 10
Math.floor(-10.5)// -11
3. Math.ceil():可能な最大の整数値を与えるために使用されます。すべてのブラウザでサポートされています。
例:
Math.ceil(10.5)// 11
Math.ceil(-10.5)// -10
4. Math.round():最も近い整数に丸められます。すべてのブラウザでサポートされています。
例:
Math.round(10.5)// 11
数学ラウンド(-10.5)// -10
Math.round(10.49)// 10
Math.round(-10.51)// -11
これは、ユーザーが10進数を入力するのを防ぎたい人向けです
<input id="myInput" onkeyup="doSomething()" type="number" />
<script>
function doSomething() {
var intNum = $('#myInput').val();
if (!Number.isInteger(intNum)) {
intNum = Math.round(intNum);
}
console.log(intNum);
}
</script>
例えば:
var x = 9.656;
x.toFixed(0); // returns 10
x.toFixed(2); // returns 9.66
x.toFixed(4); // returns 9.6560
x.toFixed(6); // returns 9.656000
または
parseInt("10"); // returns 10
parseInt("10.33"); // returns 10
parseInt("10 20 30"); // returns 10
parseInt("10 years"); // returns 10
parseInt("years 10"); // returns NaN
Math.floor()
が増加することに注意してください。このように。(@FloydPinkで言及されているように)は、正と負の両方の数値で予想される小数部を破棄します。Math.floor(-1.2) -> -2
Math.floor(1.2) -> 1
parseInt(-1.2) -> -1