2011-10-24 2 views
6

Je valide un nombre décimal en utilisant JavaScript. Am juste en utilisant NaNY at-il une fonction JS pour trouver la valeur avant et après le point décimal

var a = 12345,67 Y at-il une fonction javascript pour obtenir le nombre ou la valeur elle-même avant et après la virgule.

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

Veuillez ne pas suggérer une sous-chaîne!

+0

une simple question. différentes personnes différentes réponses. c'est le succès de SO. génial :-) – user987880

Répondre

19
var a = 12345.67; 

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

est ici simple violon http://jsfiddle.net/qWtSc/


suggestion zzzzBov est ce

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; 
} 

Utilisation

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

Merci. mais je pensais qu'il y aurait une fonction numérique. cela fonctionnera quand même mais cette fonction de chaîne si vous finissez n'importe quelle fonction numérique svp suggérez – user987880

+0

@ user987880, vous pourriez juste prolonger 'Number.prototype' pour ajouter les fonctions nécessaires. – zzzzBov

+0

@ user987880 a édité ma réponse avec la suggestion 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

Ils voulaient que la fracPart soit 67, pas .67. – jfriend00

+0

hmmm jfriend trouver le mal un dans cette bonne réponse :-) – user987880

+0

@ user987880 Ajouté du code -approché d'un angle différent :) – evilone

7

before est facile. C'est juste une opération d'arrondi.

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

after est plus difficile sans traitement de chaîne. Je veux dire comment voulez-vous gérer after(Math.PI)? Vous ne pouvez pas conserver un entier avec un nombre infini de chiffres après tout.

Mais avec un traitement de chaîne, c'est facile, sachez que ce ne sera pas exact en raison des merveilles de calcul en virgule flottante.

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

Vote Up exige 15 réputation! si juste Merci pour l'instant :-) – user987880

+0

Si vous voulez la décimale après - (c'est-à-dire 1.123 = 0.123) vous pouvez simplement faire n - Math.floor (n) ' –

2

Jouant sur d'autres réponses ... et que vous vouliez une version « numérique » .. encore plus facile à le convertir en une chaîne et travail hors la fonction 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

Malheureusement, il n'y a aucun moyen d'obtenir la partie faction de manière fiable en utilisant les fonctions mathématiques, car des arrondis assez bizarres se produisent souvent, en fonction du moteur Javascript utilisé. La meilleure chose à faire est de le convertir en une chaîne, puis en vérifiant si les résultats sont en notation décimale ou scientifique.

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

Pour connaître le nombre/longueur de caractères après point:

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