Um projeto recente exige que formatemos o valor em milésimos no front end (ou seja, separe cada três dígitos com vírgulas). A versão anterior foi um descuido da minha parte. Modificações foram feitas agora. Se ainda houver imperfeições, por favor, me dê seu conselho!
1. Suporta dígitos de 0 a 9 separados por vírgula.
O código JS é o seguinte:
Copie o código do código da seguinte forma:
/**
*Formatação JS
* @param number O número a ser formatado
* @param d [0-9] separados por vírgulas
*/
function numFormat(número,d) {
var numArrs = ['0','1','2','3','4','5','6','7','8','9'],
NÚMERO_REG = /^/d+(./d+)?$/;
d = d || 3; // Se não for aprovado, são 3 dígitos de milésimos.
if(isNumber(número) || isString(número) || REG_NUMBER.teste(número)) {
//Converte para string primeiro
var toString = número + '',
isPoint = toString.indexOf('.'),
prefixo, // prefixo
sufixo, // sufixo
t='';
if(éPonto > 0) {
prefixo = toString.substring(0,isPoint);
sufixo = toString.substring(isPoint + 1);
}else if(isPoint == 0) {
prefixo = '';
sufixo = toString.substring(1);
}outro {
prefixo = toString;
sufixo = '';
}
if(prefixo! = '') {
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(sufixo! = '') {
retornar t + "." + sufixo;
}outro {
retornar t;
}
}outro {
return 'Quantos dígitos passados estão incorretos';
}
}else if(prefixo != '' && sufixo == ''){
prefixo de retorno;
}else if(prefixo == '' && sufixo != ''){
prefixo = 0;
retornar prefixo + sufixo;
}outro {
retornar "Há um erro";
}
}outro {
return 'O número passado para ser formatado não está de acordo';
}
}
function isArray(item,arrs) {
for(var i = 0, ilen = arrs.length; i < ilen; i++) {
if(item == arrs[i]) {
retornar eu;
}
}
retornar -1;
}
função éNúmero(número) {
return Object.prototype.toString.apply(number) === '[número do objeto]';
}
função éString(número) {
return Object.prototype.toString.apply(número) === ['objeto String'];
}
Mas parece haver uma imperfeição. Eu chamo console.log(numFormat("1111.00")); e ele gera diretamente 1.111 em vez de 1.111.00 no console. Solte o último 0 e todo o resto estará normal! Eu testei e basicamente atende aos requisitos. Se houver alguma imperfeição, por favor me dê seu conselho!