[javascript] 자바 스크립트에서 float 형식을 지정하는 방법은 무엇입니까?

JavaScript에서 부동 소수점을 문자열로 변환 할 때 소수점 이하 두 자리 만 얻는 방법은 무엇입니까? 예를 들어 0.3445434 대신 0.34입니다.



답변

var result = Math.round(original*100)/100;

코드가 자명하지 않은 경우 의 specifics .

편집 : … 또는 Tim Büthe가toFixed 제안한대로 사용 하십시오 . 그 하나를 잊어 버렸습니다. 알려 줘서 고마워요.


답변

숫자를 반올림하는 기능이 있습니다. 예를 들면 다음과 같습니다.

var x = 5.0364342423;
print(x.toFixed(2));

5.04를 인쇄합니다.

편집 :
바이올린


답변

다음을 사용할 때주의하십시오 toFixed():

첫째, 숫자의 반올림은 숫자의 이진 표현을 사용하여 이루어 지므로 예기치 않은 동작이 발생할 수 있습니다. 예를 들어

(0.595).toFixed(2) === '0.59'

대신에 '0.6'.

둘째,에 IE 버그가 toFixed()있습니다. IE (적어도 버전 7까지는 IE8을 확인하지 않음)에서 다음 사항이 적용됩니다.

(0.9).toFixed(0) === '0'

kkyy의 제안을 따르거나 사용자 정의 toFixed()기능 을 사용하는 것이 좋습니다.

function toFixed(value, precision) {
    var power = Math.pow(10, precision || 0);
    return String(Math.round(value * power) / power);
}


답변

알아야 할 또 하나의 문제 toFixed()는 숫자 끝에 불필요한 0을 생성 할 수 있다는 것입니다 . 예를 들면 다음과 같습니다.

var x=(23-7.37)
x
15.629999999999999
x.toFixed(6)
"15.630000"

아이디어는 다음을 사용하여 출력을 정리하는 것입니다 RegExp.

function humanize(x){
  return x.toFixed(6).replace(/\.?0*$/,'');
}

RegExp정수는 후행 0 (및 선택적으로 소수점)과 일치하여 정수에도 좋습니다.

humanize(23-7.37)
"15.63"
humanize(1200)
"1200"
humanize(1200.03)
"1200.03"
humanize(3/4)
"0.75"
humanize(4/3)
"1.333333"


답변

var x = 0.3445434
x = Math.round (x*100) / 100 // this will make nice rounding


답변

승수를 사용하여 떠 다니는 모든 솔루션에 문제가 있습니다. kkyy와 Christoph의 솔루션은 모두 불행히도 잘못되었습니다.

번호 코드를 테스트하십시오 551.175 2 소수 자릿수가 – 그것은 반올림됩니다 551.17 그것이 있어야하는 동안 551.18을 ! 그러나 당신이 전을 테스트한다면. 451.175 괜찮습니다-451.18. 따라서이 오류를 한 눈에 파악하기는 어렵습니다.

곱하기 문제가 있습니다 : 551.175 * 100 = 55117.49999999999 (ups!)

그래서 내 생각은 Math.round ()를 사용하기 전에 toFixed ()로 처리하는 것입니다.

function roundFix(number, precision)
{
    var multi = Math.pow(10, precision);
    return Math.round( (number * multi).toFixed(precision + 1) ) / multi;
}


답변

여기서 핵심은 올바르게 올림 한 다음 문자열로 변환하는 것입니다.

function roundOf(n, p) {
    const n1 = n * Math.pow(10, p + 1);
    const n2 = Math.floor(n1 / 10);
    if (n1 >= (n2 * 10 + 5)) {
        return (n2 + 1) / Math.pow(10, p);
    }
    return n2 / Math.pow(10, p);
}

// All edge cases listed in this thread
roundOf(95.345, 2); // 95.35
roundOf(95.344, 2); // 95.34
roundOf(5.0364342423, 2); // 5.04
roundOf(0.595, 2); // 0.60
roundOf(0.335, 2); // 0.34
roundOf(0.345, 2); // 0.35
roundOf(551.175, 2); // 551.18
roundOf(0.3445434, 2); // 0.34

이제이 값을 toFixed (p)로 안전하게 형식화 할 수 있습니다. 따라서 구체적인 경우 :

roundOf(0.3445434, 2).toFixed(2); // 0.34