나눗셈 결과가 있고 결과 숫자의 소수 부분을 버리고 싶습니다.
어떻게해야합니까?
나눗셈 결과가 있고 결과 숫자의 소수 부분을 버리고 싶습니다.
어떻게해야합니까?
답변:
당신은 사용할 수 있습니다 ...
Math.trunc() (소수 부분 자르기, 아래 참조)Math.floor() (아래로)Math.ceil() (모으다) Math.round() (가장 가까운 정수로 반올림)... 소수점 제거 방법에 따라 다릅니다.
Math.trunc()아직 모든 플랫폼 (IE)에서 지원되지는 않지만 그 동안 폴리 필 을 쉽게 사용할 수 있습니다 .
우수한 플랫폼지지를 갖는 분수 부분을 절단하는 다른 방법은 비트 연산자 (예를 들어 |0)를 사용하는 것이다. 숫자에 비트 연산자를 사용하는 부작용은 피연산자를 부호있는 32 비트 정수로 취급하므로 분수 구성 요소가 제거된다는 것입니다. 이것은 또한 32 비트보다 큰 숫자를 맹 글링한다는 것을 명심하십시오.
부동 소수점 산술과 십진 반올림의 부정확성에 대해 이야기 할 수도 있습니다.
> (2.305*100)|0 > 230 > (2.3*100)|0 > 229
2.3*100javascript 의 결과는 입니다 229.99999999999997. 비트 연산자가 예제에서 올바르게 작업하는 것 같습니다.
|064 비트 정수를 사용 하는 것과 비슷한 솔루션이 있습니까?
비트 연산자를 사용하여 소수를자를 수도 있습니다.
예 :
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);
}
또한 비트 단위 연산자가 산술 연산보다 우선하므로 계산 결과를 괄호로 묶어야 원하는 결과를 얻을 수 있습니다.
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
이중 비트 NOT 연산자에 대한 자세한 정보는 Double bitwise NOT (~~) 에서 찾을 수 있습니다.
당신은 또한 할 수 있습니다
parseInt(a/b)
parseInt를 문자열로 인수를 변환 첫째로 작동하기 때문에, 많은 수에 대해 안정적으로 작동하지 않으며, 많은 수의 결과가 지수 표기법을 사용합니다. 예를 들어 , var n = 22222222222222222222222; parseInt(n);will은 return 2이므로를 n.toString()반환합니다 2.2222222222222223e+22.
parseInt()문자열로 숫자를 가져 와서 a를 반환하는 목적으로 사용하지 않습니다 Number.
u는 다음 코드를 사용하여 소수점 이하의 특정 자릿수 (여기서는 두 자리 숫자)를 표시 할 수도 있습니다
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().
(Alex의 답변이 더 좋습니다. 나는 가정했습니다.)
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
예를 들어 :
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
사용자가 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>
Math.floor()이 증가 한다는 점에 유의하십시오 . 따라서 동안 . ( @FloydPink에서 언급했듯이 )는 양수 와 음수 모두에 대해 예상되는 소수 부분을 버립니다 .Math.floor(-1.2) -> -2Math.floor(1.2) -> 1parseInt(-1.2) -> -1