JavaScript에서 주어진 [edit : positive integer ] 숫자 (1000 억 미만)를 3 글자 약어 로 변환하는 함수를 작성하려면 어떻게해야 합니까? 0-9와 az / AZ는 문자로 계산되지만 점은 (많은 비례 글꼴에서 너무 작기 때문에) 문자 제한 측면에서 무시되지 않을까요?
이 질문은 이 유용한 스레드 와 관련 이 있지만 동일하지 않습니다. 예를 들어, 그 함수가 예를 들어 "123456-> 1.23k"( "123.5k"는 5 글자)로 바뀌는 경우 "123456-> 0.1m"( "0 [.] 1m"은 3 글자입니다.) ). 예를 들어, 이것은 희망 함수의 출력 일 것입니다 (왼쪽 원본, 오른쪽 이상적인 반환 값).
0 "0"
12 "12"
123 "123"
1234 "1.2k"
12345 "12k"
123456 "0.1m"
1234567 "1.2m"
12345678 "12m"
123456789 "0.1b"
1234567899 "1.2b"
12345678999 "12b"
감사!
업데이트 : 감사합니다! 다음과 같은 수정 사항이있을 때 요구 사항에 따라 답변이 제공되고 작동합니다.
function abbreviateNumber(value) {
var newValue = value;
if (value >= 1000) {
var suffixes = ["", "k", "m", "b","t"];
var suffixNum = Math.floor( (""+value).length/3 );
var shortValue = '';
for (var precision = 2; precision >= 1; precision--) {
shortValue = parseFloat( (suffixNum != 0 ? (value / Math.pow(1000,suffixNum) ) : value).toPrecision(precision));
var dotLessShortValue = (shortValue + '').replace(/[^a-zA-Z 0-9]+/g,'');
if (dotLessShortValue.length <= 2) { break; }
}
if (shortValue % 1 != 0) shortValue = shortValue.toFixed(1);
newValue = shortValue+suffixes[suffixNum];
}
return newValue;
}