[javascript] JavaScript에서 숫자를 반올림하는 방법은 무엇입니까? .toFixed ()는 문자열을 반환합니까?

여기에 뭔가 빠졌습니까?

var someNumber = 123.456;
someNumber = someNumber.toFixed(2);
alert(typeof(someNumber));
//alerts string

않는.toFixed()문자열을 반환?

숫자를 소수점 이하 두 자리로 반올림하고 싶습니다.



답변

이진 부동 소수점 시스템에서는 0.1과 10 진수 분수를 표시하는 데 사용되는 제곱을 표현할 수 없기 때문에 문자열을 반환합니다.

예를 들어 0.1은 실제로 0.1000000000000000055511151231257827021181583404541015625이고 0.01은 실제로 0.01000000000000000020816681711721685132943093776702880859375입니다. ( BigDecimal내 요점을 증명해 주셔서 감사합니다 . :-P)

따라서 (소수점 부동 소수점 또는 유리수 유형 없음) 문자열로 출력하는 것이 표시에 필요한 정밀도로 정확하게자를 수있는 유일한 방법입니다.


답변

Number.prototype.toFixed숫자 를 인쇄하기 전에 형식을 지정 하도록 설계된 기능입니다 . 그것은 가족 출신 toString, toExponential그리고toPrecision .

숫자를 반올림하려면 다음을 수행하십시오.

someNumber = 42.008;
someNumber = Math.round( someNumber * 1e2 ) / 1e2;
someNumber === 42.01;

// if you need 3 digits, replace 1e2 with 1e3 etc.
// or just copypaste this function to your code:

function toFixedNumber(num, digits, base){
  var pow = Math.pow(base||10, digits);
  return Math.round(num*pow) / pow;
}

.

당신이 “원하는 경우 또는 원시와 같은 “기능을, 당신은 프로토 타입을 확장 할 수 있습니다 :

Number.prototype.toFixedNumber = function(digits, base){
  var pow = Math.pow(base||10, digits);
  return Math.round(this*pow) / pow;
}
someNumber = 42.008;
someNumber = someNumber.toFixedNumber(2);
someNumber === 42.01;


//or even hexadecimal

someNumber = 0xAF309/256  //which is af3.09
someNumber = someNumber.toFixedNumber(1, 16);
someNumber.toString(16) === "af3.1";

그러나 모듈에는 부작용이 없어야 모듈을 작성할 때 프로토 타입을 오염시키는 것이 좋지 않은 것으로 간주됩니다. 따라서 모듈의 경우 첫 번째 함수를 사용하십시오 .


답변

이것을 변경 하여이 문제를 해결했습니다.

someNumber = someNumber.toFixed(2)

…이에:

someNumber = +someNumber.toFixed(2);

그러나 이것은 숫자를 문자열로 변환하고 다시 구문 분석하여 성능에 큰 영향을 미칩니다. 성능이나 유형 안전에 관심이 있다면 다른 답변도 확인하십시오.


답변

왜 사용하지 parseFloat않습니까?

var someNumber = 123.456;
someNumber = parseFloat(someNumber.toFixed(2));
alert(typeof(someNumber));
//alerts number


답변

JavaScript Number()함수를 사용하여 숫자로 다시 변환하여 해결했습니다.

var x = 2.2873424;
x = Number(x.toFixed(2));


답변

물론 문자열을 반환합니다. 숫자 변수를 반올림하려면 Math.round ()를 대신 사용하십시오. 고정 지점 은 사용자에게 표시 할 고정 소수점 이하 자릿수 숫자를 형식화하는 것 입니다.


답변

단순히 ‘+’를 사용하여 결과를 숫자로 변환 할 수 있습니다.

var x = 22.032423;
x = +x.toFixed(2); // x = 22.03