Un proyecto reciente requiere que formateemos la cantidad en milésimas en la parte frontal (es decir, separe cada tres dígitos con comas. El código ha sido modificado. La versión anterior fue un descuido de mi parte). Se han realizado modificaciones ahora. Si todavía hay imperfecciones, ¡por favor dame tu consejo!
1. Admite dígitos del 0 al 9 separados por comas.
El código JS es el siguiente:
Copie el código de código de la siguiente manera:
/**
*Formato JS
* @param número El número que se va a formatear
* @param d [0-9] separado por comas
*/
función numFormat(número,d) {
var numArrs = ['0','1','2','3','4','5','6','7','8','9'],
REG_NUMBER = /^/d+(./d+)?$/;
d = d || 3; // Si no se pasa, son 3 dígitos de milésimas.
if(esNúmero(número) || esCadena(número) || REG_NUMBER.test(número)) {
//Convertir primero a cadena
var toString = número + '',
isPoint = toString.indexOf('.'),
prefijo, // prefijo
sufijo, // sufijo
t = '';
si(esPunto > 0) {
prefijo = toString.substring(0,isPoint);
sufijo = toString.substring(isPoint + 1);
}de lo contrario si(isPoint == 0) {
prefijo = '';
sufijo = toString.substring(1);
}demás {
prefijo = toString;
sufijo = '';
}
si(prefijo!= '') {
prefixArr = prefijo.split('').reverse();
var isArrayIndex = isArray(d,numArrs);
si(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("");
si(sufijo!= '') {
devolver t + "." + sufijo;
}demás {
devolver t;
}
}demás {
return '¿Cuántos dígitos pasados son incorrectos?';
}
}si no (prefijo! = '' && sufijo == ''){
prefijo de retorno;
}si no (prefijo == '' && sufijo != ''){
prefijo = 0;
devolver prefijo + sufijo;
}demás {
devolver "Hay un error";
}
}demás {
return 'El número pasado para formatear no cumple';
}
}
función esArray(elemento,arrs) {
for(var i = 0, ilen = arrs.length; i < ilen; i++) {
si(elemento == arreglos[i]) {
devolver yo;
}
}
devolver -1;
}
la función esNúmero(número) {
return Object.prototype.toString.apply(número) === '[Número de objeto]';
}
la función esCadena(número) {
return Object.prototype.toString.apply(número) === ['Cadena de objeto'];
}
Pero parece haber una imperfección. Llamo a console.log(numFormat("1111.00")); y genera directamente 1.111 en lugar de 1.111,00 en la consola. En otras palabras, si el punto decimal es 0, el navegador lo borrará automáticamente. ¡Suelta el último 0 y todo lo demás es normal! Lo he probado y básicamente cumple con los requisitos. Si hay alguna imperfección, ¡por favor dame tu consejo!