2011-10-24 6 views
6

Estoy validando un número decimal usando JavaScript. Am justo allí utilizando NaN¿Existe alguna función JS para encontrar el valor antes y después del punto decimal?

var a = 12345.67 es cualquier función javascript para obtener el número o el valor en sí antes y después del punto decimal.

before() should return 1234 
after() should return 67 

Por favor, no sugiera una subcadena!

+0

una pregunta sencilla. diferentes personas diferentes respuestas. este es el éxito de SO. genial :-) – user987880

Respuesta

19
var a = 12345.67; 

alert(a.toString().split(".")[0]); ///before 
alert(a.toString().split(".")[1]); ///after 

Aquí es un violín sencilla http://jsfiddle.net/qWtSc/


sugerencia de zzzzBov es este

Number.prototype.before = function() { 
    var value = parseInt(this.toString().split(".")[0], 10);//before 
    return value ? value : 0; 
} 

Number.prototype.after = function() { 
    var value = parseInt(this.toString().split(".")[1], 10);//after 
    return value ? value : 0; 
} 

Uso

alert(a.before()); ///before 
alert(a.after()); ///after 
+0

Gracias. pero pensé que habría alguna función numérica. esto funcionará de todos modos, pero esta función de cadena si tiene alguna función numérica, por favor sugiera – user987880

+0

@ user987880, podría extender 'Number.prototype' para agregar las funciones necesarias. – zzzzBov

+0

@ user987880 corrigió mi respuesta con la sugerencia de zzzzBov. –

2
var decimalPlaces = 2;  
var num = 12345.673 
var roundedDecimal = num.toFixed(decimalPlaces); 

var intPart = Math.floor(roundedDecimal); 
var fracPart = parseInt((roundedDecimal - intPart), 10); 

//or 

var fractPart = (roundedDecimal - intPart) * Math.pow(10, decimalPlaces); 
+0

Querían que el fracPart fuera 67, no .67. – jfriend00

+0

hmmm jfriend encuentra el maligno en esa buena respuesta :-) – user987880

+0

@ user987880 Agregó un código - abordado desde un ángulo diferente :) – evilone

7

before es fácil. Es solo una operación de redondeo.

var before = function(n) { 
    return Math.floor(n); 
}; 

after es más difícil sin procesamiento de cadenas. Quiero decir, ¿cómo manejarías after(Math.PI)? Después de todo, no puede contener un número entero con un número infinito de dígitos.

Pero con un poco de procesamiento de cadenas es fácil, solo sé que no será exacto debido a las maravillas de la matemática de coma flotante.

var after = function(n) { 
    var fraction = n.toString().split('.')[1]; 
    return parseInt(fraction, 10); 
}; 
+0

¡Para recuperar requiere 15 reputación! así que solo gracias por ahora :-) – user987880

+0

Si quiere el decimal después - (es decir, 1.123 = 0.123) puede hacer 'n - Math.floor (n)' –

2

Jugar fuera de otras respuestas ... y que quería una versión 'numérico' .. aún más fácil de convertir en una cadena y el trabajo fuera de la función de división ...

function getNatural(num) { 
    return parseFloat(num.toString().split(".")[0]); 
} 
function getDecimal(num) { 
    return parseFloat(num.toString().split(".")[1]); 
} 
var a = 12345.67; 

alert(getNatural(a)); ///before 
alert(getDecimal(a)); ///after 

http://jsfiddle.net/rlemon/qWtSc/1/

0

Desafortunadamente no hay forma de obtener la parte de facciones de manera confiable usando funciones matemáticas, porque a menudo se producen redondeos bastante extraños, dependiendo del motor de Javascript utilizado. Lo mejor que puedes hacer es convertirlo en una cadena y luego verificar si los resultados están en notación decimal o científica.

Number.prototype.after = function() { 
    var string = this.toString(); 
    var epos = string.indexOf("e"); 
    if (epos === -1) { // Decimal notation 
     var i = string.indexOf("."); 
     return i === -1 ? "" : n.substring(i + 1); 
    } 
    // Scientific notation 
    var exp = string.substring(epos + 1) - 0; // this is actually faster 
               // than parseInt in many browsers 
    var mantix = n.string.substring(0, epos).replace(".", ""); 
    if (exp >= -1) return mantix.substring(exp + 1); 
    for (; exp < -1; exp++) mantix = "0" + mantix; 
    return mantix; 
} 
0

Para encontrar el recuento/longitud de caracteres después del punto:

var a = 12345.67; 
var after_dot = (a.toString().split(".")[1]).length; 
var before_dot= (a.toString().split(".")[0]).length; 
Cuestiones relacionadas