2011-10-24 12 views
6

Sto convalidando un numero decimale utilizzando JavaScript. Am proprio lì usando NaNC'è una funzione JS per trovare il valore prima e dopo il punto decimale

var a = 12.345,67 è un qualsiasi funzione javascript per ottenere il conteggio o il valore di per sé, prima e dopo il punto decimale.

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

Si prega di non suggerire una sottostringa!

+0

una semplice domanda. diverse persone diverse risposte. questo è il successo di SO. ottimo :-) – user987880

risposta

19
var a = 12345.67; 

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

Ecco un semplice violino http://jsfiddle.net/qWtSc/


suggerimento di zzzzBov è questo

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

Grazie. ma ho pensato che ci sarà qualche funzione numerica. questo funzionerà comunque, ma questa funzione di stringa se si finisce qualsiasi funzione numerica si prega di suggerire – user987880

+0

@ user987880, si potrebbe semplicemente estendere 'Number.prototype' per aggiungere le funzioni necessarie. – zzzzBov

+0

@ user987880 ha modificato la mia risposta con il suggerimento di 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

Volevano che il fracPart fosse 67, non .67. – jfriend00

+0

hmmm jfriend trovare il malvagio in quella buona risposta :-) – user987880

+0

@ user987880 Aggiunto un po 'di codice -appreso da una diversa angolazione :) – evilone

7

before è facile. È solo un'operazione al ribasso.

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

after è più difficile senza elaborazione stringa. Voglio dire, come gestiresti after(Math.PI)? Dopo tutto non è possibile contenere un numero intero con un numero infinito di cifre.

Ma con un po 'di elaborazione delle stringhe è facile, basta sapere che non sarà esatto a causa delle meraviglie della matematica in virgola mobile.

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

Vote Up richiede 15 reputazione! quindi Grazie per ora :-) – user987880

+0

Se vuoi il decimale dopo - (cioè 1.123 = 0.123) puoi semplicemente fare 'n - Math.floor (n)' –

2

Giocare fuori di altre risposte ... e si voleva una versione 'numerica' .. ancora più semplice per convertire in una stringa e staccare la funzione split ...

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

Sfortunatamente non è possibile ottenere in modo affidabile la parte di fazione utilizzando le funzioni matematiche, poiché spesso si verificano arrotondamenti piuttosto strani, a seconda del motore JavaScript utilizzato. La cosa migliore da fare è convertirlo in una stringa e quindi controllare se i risultati sono in notazione decimale o scientifica.

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

Per trovare il conteggio/lunghezza dei caratteri dopo dot:

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