숫자에서 후미의 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;
