숫자를 쉼표 뒤 2 자리로 반올림


83

어떻게 해야할지 모르겠어요? 나는 쉼표 번호를 추가하고 있는데, 결과는 물론 항상 쉼표 뒤에 너무 많은 자릿수가있는 숫자입니다. 누군가?


1
일부 로케일의 경우 쉼표가 마침표로 대체됩니다.
DOK

@Matt-이것은 jParseFloat 플러그인의 일부이며 1.5에서 jQuery 코어의 일부가 될 것입니다!
Nick Craver

답변:


107

편집 2 :

다음과 같이 Number개체의 toFixed메서드를 사용합니다 .

var num = Number(0.005) // The Number() only visualizes the type and is not needed
var roundedString = num.toFixed(2);
var rounded = Number(roudedString); // toFixed() returns a string (often suitable for printing already)

42.0054321에서 42.01로 반올림됩니다.

0.005에서 0.01로 반올림합니다.

-0.005를 -0.01로 반올림합니다 (따라서 .5 경계에서 반올림 할 때 절대 값이 증가합니다).

jsFiddle 예제


1
@Sten-쉼표 또는 십진수? 귀하의 질문과 예가 동의하지 않습니다.
Nick Craver

11
이 예제는 0.007을 소수점 이하 두 자리로 반올림하려는 경우에는 작동하지 않습니다. 결과는 Math.round (0.007)-> 0.000 그리고 toFixed (2)-> 0.00입니다. 실제 반올림 프로세스는 0.01을 렌더링해야합니다.
Andrei

9
downvote : Math.round ()가 숫자를 반올림하여 모든 소수를 제거하므로 대답이 올바르지 않습니다. 그런 다음 toFixed (2)는 두 개의 후행 0을 추가합니다. number.toFixed (2) 만하면됩니다.
HammerNL 2014 년

1
이 답변이 잘못되어 다른 사람들이 수락 된 답변을 맹목적으로 사용하기 전에 댓글을 읽지 않을 수 있으므로 조치를 취해야합니다.
Pedro Moreira

1
-1 : 3.1415이됩니다 3.00귀하의 예제에서.

102

업데이트 : 2010 년에 답변이 처음 작성되었을 때 벨로우즈 함수 toFixed ()가 약간 다르게 작동했습니다. toFixed ()는 이제 약간의 반올림을 수행하는 것처럼 보이지만 엄격하게 수학적 방식은 아닙니다. 그러니 조심하세요. 테스트를 수행하십시오 ... 아래에 설명 된 방법은 수학자가 예상하는대로 반올림을 잘 수행합니다.

  • toFixed()-메서드는 지정된 소수 자릿수를 유지하면서 숫자를 문자열로 변환합니다. 실제로 숫자를 반올림하는 것이 아니라 숫자를 자릅니다.
  • Math.round(n)-숫자를 가장 가까운 정수로 반올림합니다. 따라서 회전 :

0.5-> 1; 0.05-> 0

반올림하려면 숫자 0.55555를 소수점 둘째 자리까지만 올립니다. 다음을 수행 할 수 있습니다 (단계별 개념).

  • 0.55555 * 100 = 55.555
  • Math.Round(55.555) -> 56.000
  • 56.000 / 100 = 0.56000
  • (0.56000).toFixed(2) -> 0.56

그리고 이것은 코드입니다.

(Math.round(number * 100)/100).toFixed(2);

나는 같은 방법을 사용합니다. 좋은 작품
인디애나 Kernick

> (Math.round (123.12124 * 100) / 100) .toFixed (4);와 같이 혼수 상태 뒤에 원하는 숫자가있는 부동 소수점이 이미있는 경우 예제에 문제가 발생했습니다. ===> 123.1200
Alendorff

1
다음과 같이 반올림 수학을 변경하는 것을 잊었습니다. Math.round (123.12124 * 10000) / 10000) .toFixed (4). 소수점 4 자리로 반올림하려는 경우입니다.
Andrei

오류 : toFixed () 숫자를 반올림하므로 잘리지 않습니다. 참조 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
MikeB

1.005를 위해 통과하지 않습니다
렌 요셉에게

55

이것은 나를 위해 일했습니다.

var new_number = float.toFixed(2);

예:

var my_float = 0.6666

my_float.toFixed(3) # => 0.667

나는 생각한다 , 그래서이의 문제가 아니 "라운드"수를 않는다는 것입니다 0.6666.toFixed(3)됩니다 0.666대신 0.667. @Andrei는 올바로 반올림하기에 적합한 솔루션을 가지고있는 것 같습니다.
Joshua Pinter

1
하아! 신경 쓰지 마. 방금 테스트했고 toFixed()완벽하게 작동합니다 0.6666.toFixed(3) # => 0.667.. 당신의 대답에 추가하겠습니다.
Joshua Pinter

3
가장 짧고 최고입니다. 이것은 받아 들여진 대답이어야합니다.

12

이전 답변은 출력을 다시 숫자로 입력하는 것을 잊었습니다. 취향에 따라 여러 가지 방법이 있습니다.

+my_float.toFixed(2)

Number(my_float.toFixed(2))

parseFloat(my_float.toFixed(2))

1
이것이 저에 따르면 가장 좋은 대답입니다. 그것은 짧고 간단하며 그 결과는 숫자입니다
Kar.ma

의 "+"표기법과 같은 I, 매우 우아
Jibeee

5

이것은 실제로 CPU 친화적이지 않지만 :

Math.round(number*100)/100

예상대로 작동합니다.


2

여기에 유용한 제안이 많이 포함 된 많은 답변이 있지만 각각은 여전히 몇 단계를 놓치고 있습니다.
그래서 여기 에 작은 함수로 묶인 완전한 솔루션이 있습니다.

function roundToTwoDigitsAfterComma(floatNumber) {
    return parseFloat((Math.round(floatNumber * 100) / 100).toFixed(2));
}

이것이 어떻게 작동하는지 관심이있는 경우 :

  1. 100으로 배수 한 다음 반올림하여 쉼표 뒤의 2 자리 정밀도를 유지합니다.
  2. 다시 100으로 나누고 toFixed(2)쉼표 뒤에 2 자리 숫자를 유지하고 다른 사용하지 않는 부분을 던집니다.
  3. 대신 parseFloat()함수를 toFixed(2)반환 문자열 로 사용하여 다시 float로 변환하십시오.

참고 : 금전적 값으로 작업하기 때문에 쉼표 뒤에 마지막 2 자리를 유지 하고 재무 계산을 수행 하는 경우 이는 좋은 생각아니므로 대신 정수 값을 사용 하는 것이 좋습니다 .


1

아래 코드를 사용하십시오.

alert(+(Math.round(number + "e+2")  + "e-2"));

2
이 답변은이 7 년 된 질문에 대한 다른 답변과 본질적으로 동일하지만 매우 모호한 방식으로 javascript의 암시 적 유형 변환을 이용합니다. 이 코드의 어떤 특성으로 인해 여기에 게시 할 수 있었습니까?
u354356007

이 답변의 질은 나에게 새로운 내가 ;-) JS에 대해 알고하지 않았다 뭔가 배울 만든 것입니다
Deblaton 장 - 필립

0

나는 이것을 사용한다 :

function round(value, precision) {

	if(precision == 0)
		return Math.round(value);  	

	exp = 1;
	for(i=0;i<precision;i++)
		exp *= 10;

	return Math.round(value*exp)/exp;
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.