최근 프로젝트에서는 프런트 엔드에서 금액을 1000분의 1 단위로 형식화해야 합니다(즉, 세 자리마다 쉼표로 구분). 이전 버전은 제 실수로 수정되었습니다. 지금 수정했습니다. 여전히 불완전한 부분이 있으면 조언을 주세요!
1. 쉼표로 구분된 0~9자리 숫자를 지원합니다.
JS 코드는 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다.
/**
*JS 형식
* @param number 서식을 지정할 숫자
* @param d [0-9] 쉼표로 구분
*/
함수 numFormat(숫자,d) {
var numArrs = ['0','1','2','3','4','5','6','7','8','9'],
REG_NUMBER = /^/d+(./d+)?$/;
d = d || 3; // 통과하지 못한 경우 1000분의 3자리입니다.
if(isNumber(번호) || isString(번호) || REG_NUMBER.test(번호)) {
//먼저 문자열로 변환
var toString = 숫자 + '',
isPoint = toString.indexOf('.'),
접두사, // 접두사
접미사, // 접미사
t = '';
if(isPoint > 0) {
접두사 = toString.substring(0,isPoint);
접미사 = toString.substring(isPoint + 1);
}else if(isPoint == 0) {
접두사 = '';
접미사 = toString.substring(1);
}또 다른 {
접두사 = toString;
접미사 = '';
}
if(접두사 != '') {
prefixArr = prefix.split('').reverse();
var isArrayIndex = isArray(d,numArrs);
if(isArrayIndex > -1) {
for(var i = 0, ilen = prefixArr.length; i < ilen; i+=1) {
t += prefixArr[i] + ((i + 1) % isArrayIndex == 0 && (i + 1) != prefixArr.length ? "," : "");
}
t = t.split("").reverse().join("");
if(접미사 != '') {
t + "."를 반환합니다.
}또 다른 {
t를 반환;
}
}또 다른 {
return '잘못된 숫자가 전달된 횟수';
}
}else if(접두사 != '' && 접미사 == ''){
접두사 반환;
}else if(접두사 == '' && 접미사 != ''){
접두사 = 0;
접두사 + 접미사를 반환합니다.
}또 다른 {
"오류가 있습니다"를 반환합니다.
}
}또 다른 {
return '포맷을 지정하기 위해 전달된 숫자가 규격에 맞지 않습니다.';
}
}
함수 isArray(항목,arrs) {
for(var i = 0, ilen = arrs.length; i < ilen; i++) {
if(항목 == arrs[i]) {
나는 반환;
}
}
-1을 반환합니다.
}
함수 isNumber(숫자) {
return Object.prototype.toString.apply(number) === '[객체 번호]';
}
함수 isString(숫자) {
return Object.prototype.toString.apply(number) === ['object String'];
}
하지만 불완전한 것 같습니다. console.log(numFormat("1111.00")); 을 호출하면 콘솔에 1,111.00 대신 1,111이 직접 출력됩니다. 즉, 소수점이 0이면 브라우저가 자동으로 지워집니다. 마지막 0을 삭제하면 나머지는 모두 정상입니다! 테스트해본 결과 기본적으로 요구 사항을 충족합니다. 불완전한 부분이 있으면 조언을 부탁드립니다.