javascript parsefloat 자릿수 - 어떻게 자바 스크립트에서 float을 포맷?



6 Answers

숫자를 반올림하는 함수가 있습니다. 예 :

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

5.04가 인쇄됩니다.

편집 : Fiddle

소수점 자리수 구하기

JavaScript에서는 부동 소수점을 문자열로 변환 할 때 소수점 이하 2 자리를 어떻게 얻을 수 있습니까? 예 : 0.3445434 대신 0.34.




알고 있어야 할 또 하나의 문제는 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"



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

2 자리 소수점 551.175에 대한 코드를 테스트하십시오 - 551.17반올림 되지만 551.18 이어야합니다! 하지만 전 예를 시험하면. 451.175 괜찮을 것입니다 - 451.18. 첫눈에이 오류를 발견하는 것은 어렵습니다.

문제는 다음과 같이 곱하는 것입니다. try 551.175 * 100 = 55117.49999999999 (ups!)

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

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



function trimNumber(num, len) {
  const modulu_one = 1;
  const start_numbers_float=2;
  var int_part = Math.trunc(num);
  var float_part = String(num % modulu_one);
      float_part = float_part.slice(start_numbers_float, start_numbers_float+len);
  return int_part+'.'+float_part;
}



곱셈 또는 나눗셈을 사용하여 x.xx5가 실제 값으로 가격에 대한 일관성없는 반올림을 피할 방법이 없습니다. 클라이언트 측에서 정확한 가격을 계산해야하는 경우 모든 금액을 센트로 유지해야합니다. 이것은 JavaScript에서 숫자 값의 내부 표현의 특성 때문입니다. Excel은 동일한 문제로 고통 받고 있으므로 대부분의 사람들은이 현상으로 인한 작은 오류를 알지 못합니다. 그러나 계산 된 값을 많이 추가 할 때마다 오류가 누적 될 수 있습니다. 최종 결과에서 오류를 최소화하기위한 계산 및 다른 방법의 순서와 관련된 전체 이론이 있습니다. 십진수 값의 문제를 강조하기 위해 JavaScript에서 0.1 + 0.2는 0.3과 정확히 같지 않으며 1 + 2는 3과 같습니다.




이 코드를 사용하여 수레를 포맷합니다. toPrecision() 기반으로하지만 불필요한 0을 제거합니다. 정규식을 단순화하는 방법에 대한 제안을 환영합니다.

function round(x, n) {
    var exp = Math.pow(10, n);
    return Math.floor(x*exp + 0.5)/exp;
}

사용 예 :

function test(x, n, d) {
    var rounded = rnd(x, d);
    var result = rounded.toPrecision(n);
    result = result.replace(/\.?0*$/, '');
    result = result.replace(/\.?0*e/, 'e');
    result = result.replace('e+', 'e');
    return result;  
}

document.write(test(1.2000e45, 3, 2) + '=' + '1.2e45' + '<br>');
document.write(test(1.2000e+45, 3, 2) + '=' + '1.2e45' + '<br>');
document.write(test(1.2340e45, 3, 2) + '=' + '1.23e45' + '<br>');
document.write(test(1.2350e45, 3, 2) + '=' + '1.24e45' + '<br>');
document.write(test(1.0000, 3, 2) + '=' + '1' + '<br>');
document.write(test(1.0100, 3, 2) + '=' + '1.01' + '<br>');
document.write(test(1.2340, 4, 2) + '=' + '1.23' + '<br>');
document.write(test(1.2350, 4, 2) + '=' + '1.24' + '<br>');



Related