[javascript] 숫자에서 중요하지 않은 후행 0을 제거 하시겠습니까?

숫자에서 후미의 0을 제거하는 표준 API 호출을 놓쳤습니까?

전의.

var x = 1.234000 // to become 1.234;
var y = 1.234001; // stays 1.234001

Number.toFixed () 및 Number.toPrecision ()은 내가 찾고있는 것이 아닙니다.



답변

문자열로 변환하면 문자열이 아닌 숫자로 작성된 이후 변수에 저장되지 않는 후행 0이 표시되지 않습니다.

var n = 1.245000
var noZeroes = n.toString() // "1.245" 


답변

필자는 .toFixed()필요한 곳 에서 사용 하고 싶었던 비슷한 인스턴스를 가지고 있었지만 그렇지 않을 때 패딩을 원하지 않았습니다. 그래서 toFixed와 함께 parseFloat를 사용했습니다.

패딩없이 고정

parseFloat(n.toFixed(4));

거의 같은 일을하는 다른 옵션
이 답변은 결정에 도움이 될 수 있습니다

Number(n.toFixed(4));

toFixed숫자를 특정 길이로 반올림 / 채울뿐만 아니라 문자열로 변환합니다. 다시 숫자 형식으로 변환하면 숫자를 산술적으로 사용하는 것이 더 안전 할뿐만 아니라 후행 0도 자동으로 삭제합니다. 예를 들면 다음과 같습니다.

var n = "1.234000";
    n = parseFloat(n);
 // n is 1.234 and in number form

후행 0으로 숫자를 정의하더라도 삭제됩니다.

var n = 1.23000;
 // n == 1.23;


답변

나는 먼저 matti-lyra와 gary의 답변을 조합하여 사용했습니다.

r=(+n).toFixed(4).replace(/\.0+$/,'')

결과 :

  • 1234870.98762341 : “1234870.9876”
  • 1230009100 : “1230009100”
  • 0.0012234 : “0.0012”
  • 0.1200234 : “0.12”
  • 0.000001231 : “0”
  • 0.10001 : “0.1000”
  • “asdf”: “NaN”(런타임 오류가 없음)

다소 문제가되는 경우는 0.10001입니다. 이 더 긴 버전을 사용하게되었습니다.

    r = (+n).toFixed(4);
    if (r.match(/\./)) {
      r = r.replace(/\.?0+$/, '');
    }
  • 1234870.98762341 : “1234870.9876”
  • 1230009100 : “1230009100”
  • 0.0012234 : “0.0012”
  • 0.1200234 : “0.12”
  • 0.000001231 : “0”
  • 0.10001 : “0.1”
  • “asdf”: “NaN”(런타임 오류가 없음)

업데이트 : 이것은 Gary의 최신 버전입니다 (의견 참조).

r=(+n).toFixed(4).replace(/([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/,'$1')

위와 동일한 결과를 제공합니다.


답변

toFixed방법은 필요한 경우 적절한 반올림을 수행합니다. 또한 항상 0이 아닌 후행 0을 추가합니다.

(4.55555).toFixed(2);
//-> "4.56"

(4).toFixed(2);
//-> "4.00"

반환 값을 숫자로 캐스팅하면 후행 0이 삭제됩니다. 이것은 자신의 반올림 또는 절단 수학을 수행하는 것보다 간단한 접근법입니다.

+(4.55555).toFixed(2);
//-> 4.56

+(4).toFixed(2);
//-> 4


답변

기본적으로 동일한 요구 사항이 있었으며이 기능에 대한 기본 제공 메커니즘이 없음을 발견했습니다.

후행 0을 다듬는 것 외에도 사용자의 현재 로캘 (예 : 123,456.789)에 대한 출력을 반올림하고 형식을 지정해야했습니다.

이것에 대한 나의 모든 작업은 GitHub에서 prettyFloat.js (MIT 라이센스)로 포함되었습니다 : https://github.com/dperish/prettyFloat.js


사용 예 :

prettyFloat(1.111001, 3) // "1.111"
prettyFloat(1.111001, 4) // "1.111"
prettyFloat(1.1111001, 5) // "1.1111"
prettyFloat(1234.5678, 2) // "1234.57"
prettyFloat(1234.5678, 2, true) // "1,234.57" (en-us)


2018 년 8 월 업데이트


모든 최신 브라우저는 이제 언어 구분 문자열 비교, 숫자 형식 및 날짜 및 시간 형식을 제공 하는 ECMAScript Internationalization API를 지원합니다 .

let formatters = {
    default: new Intl.NumberFormat(),
    currency: new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 0 }),
    whole: new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 }),
    oneDecimal: new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 1, maximumFractionDigits: 1 }),
    twoDecimal: new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 2, maximumFractionDigits: 2 })
};

formatters.twoDecimal.format(1234.5678);  // result: "1,234.57"
formatters.currency.format(28761232.291); // result: "$28,761,232"

구형 브라우저의 경우 다음 polyfill을 사용할 수 있습니다. https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en


답변

이런 식으로 곱하면 어떻습니까?

var x = 1.234000*1; // becomes 1.234

var y = 1.234001*1; // stays as 1.234001


답변

이 숫자를 사용하여 부동 숫자를 최소화 할 수 있습니다

var n = 0.0000;
n = parseFloat(n.toString());

//output n = 0; 
// n = 3.14000; --> n = 3.14;