J'ai des nombres flottants comme 3.2
et 1.6
.
J'ai besoin de séparer le nombre en partie entière et décimale. Par exemple, une valeur de 3.2
serait divisée en deux nombres, c'est 3
-à- dire et0.2
Obtenir la partie entière est facile:
n = Math.floor(n);
Mais j'ai du mal à obtenir la partie décimale. J'ai essayé ceci:
remainer = n % 2; //obtem a parte decimal do rating
Mais cela ne fonctionne pas toujours correctement.
Le code précédent a la sortie suivante:
n = 3.1 => remainer = 1.1
Qu'est-ce qui me manque ici?
n = Math.floor(n);
ne renvoie que le résultat souhaité (la partie entière) pour les nombres non négatifs% 1
not% 2
Réponses:
Utilisez
1
pas2
.la source
Math.*
ou d'%
opérations.toFixed
pourrait aider dans certaines situations, par exemple(2.3 % 1).toFixed(4)
=="0.3000"
.(2.3 % 1).toFixed(4).substring(2)
="3000"
si vous en avez besoin sans0.
2.3
est apparu, et non2
ou3
, le nombre0.2999999999999998
est parfaitement acceptable malgré son insulte aux yeux des humains.Bien que cela ne fonctionne pas pour les nombres négatifs, nous devrons peut-être faire
la source
Math.floor()
nouveau - utilisez simplement la partie entière que vous avez calculée.var n = 3.2, integr = Math.floor(n), decimal = n - integr;
utilisez Math.floor () une seule fois.integr = 3; decimal = 0.20000000000000018;
Math.floor
avecMath.trunc
.Vous pouvez convertir en chaîne, non?
la source
n.toString()
plutôt quen + ""
parce qu'il est plus lisible.n + ""
est en effet meilleure (voir jsperf.com/number-vs-number-tostring-vs-string-number ).
comme séparateur décimal, donc tout va bien si le type de votre variable d'entrée est float. Vous ne devez résoudre ce problème que si votre entrée est une chaîne. Je dois également noter que cette réponse renvoie une chaîne dans un tableau. Une solution plus complète estparseFloat('0.' + (n + '').split('.')[1])
En quoi 0,299999999999999998 est-il une réponse acceptable? Si j'étais le demandeur, je voudrais une réponse de .3. Ce que nous avons ici est une fausse précision, et mes expériences avec le plancher,%, etc. indiquent que Javascript aime la fausse précision pour ces opérations. Je pense donc que les réponses qui utilisent la conversion en chaîne sont sur la bonne voie.
Je ferais ceci:
Plus précisément, j'utilisais 100233.1 et je voulais la réponse ".1".
la source
.toString()
ne considère pas i18n. Le séparateur décimal sera toujours.
conforme à MDN et à la spécification ECMAVoici comment je le fais, ce qui, selon moi, est le moyen le plus simple de le faire:
la source
Une façon simple de le faire est:
Malheureusement, cela ne renvoie pas la valeur exacte. Cependant, cela est facilement corrigé:
Vous pouvez l'utiliser si vous ne connaissez pas le nombre de décimales:
la source
Manière indépendante de la langue:
notez qu'il ne corrige que pour les nombres avec une longueur fractioanale)
la source
var factor = Math.pow(10, desiredFractionLength); var fract = a * factor % factor / factor;
Vous pouvez utiliser la
parseInt()
fonction pour obtenir la partie entière que celle utilisée pour extraire la partie décimaleOu vous pouvez utiliser l'expression régulière comme:
la source
0.20000000000000018
... cela devient vraiment difficile à faire car0.2 < 0.20000000000000018
retourne vrai .. 3.2 censé retourner 0.2: P faisant tant d'irrégularités et utilisant la.toFixed(2)
chaîne de retour: PCe qui suit fonctionne indépendamment des paramètres régionaux pour le séparateur décimal ... à condition qu'un seul caractère soit utilisé pour un séparateur.
Ce n'est pas joli, mais c'est précis.
la source
Si la précision est importante et que vous avez besoin de résultats cohérents, voici quelques propositions qui renverront la partie décimale de n'importe quel nombre sous forme de chaîne, y compris le "0" principal. Si vous en avez besoin comme flotteur, ajoutez simplement
var f = parseFloat( result )
à la fin.Si la partie décimale est égale à zéro, "0,0" sera retourné. Les nombres nuls, NaN et non définis ne sont pas testés.
1. String.split
2. String.substring, String.indexOf
3. Math.floor, Number.toFixed, String.indexOf
4. Math.floor, Number.toFixed, String.split
Voici un lien jsPerf: https://jsperf.com/decpart-of-number/
Nous pouvons voir que la proposition n ° 2 est la plus rapide.
la source
Vous pouvez le convertir en chaîne et utiliser la
replace
méthode pour remplacer la partie entière par zéro, puis reconvertir le résultat en nombre:la source
/^[^,]/
), mais vous devez ensuite laisser le résultat sous forme de chaîne (supprimer l'+
opérateur) afin d'éviter lesNaN
résultats.Selon l'utilisation que vous en ferez ensuite, cette solution simple pourrait également vous aider.
Je ne dis pas que c'est une bonne solution, mais pour certains cas concrets, ça marche
Mais cela prendra plus de temps que la solution proposée par @Brian M. Hunt
la source
J'ai eu un cas où je savais que tous les nombres en question n'auraient qu'une décimale et je voulais obtenir la partie décimale sous forme d'entier, j'ai donc fini par utiliser ce type d'approche:
Cela fonctionne bien aussi avec des entiers, retournant 0 dans ces cas.
la source
J'utilise:
Entrée: -556.123444444
Résultat: 123444444
la source
Les fonctions mathématiques sont plus rapides, mais retournent toujours des valeurs attendues non natives. Le moyen le plus simple que j'ai trouvé est
la source
Une bonne option consiste à transformer le nombre en chaîne, puis à le diviser.
En une seule ligne de code
la source
Après avoir examiné plusieurs d'entre eux, j'utilise maintenant ...
la source
la source
Bien que je sois très en retard pour répondre à cette question, veuillez consulter le code.
la source
Le signe décimal à virgule flottante et le format numérique peuvent dépendre du pays (
.,
), donc la solution indépendante, qui a conservé la partie à virgule flottante, est:- c'est une solution internationalisée, plutôt que dépendante de l'emplacement:
Description de la solution étape par étape:
parseFloat()
pour garantir la cocrection d'entréeMath.abs()
pour éviter les problèmes avec les nombres négatifsn = parseInt(x)
pour obtenir la partie décimalex - n
pour soustraire la partie décimaletoFixed()
avec le nombre de chiffres dans la partie flottante du numéro flottant d'originex
. Le nombre est calculé comme la différence entre la longueur du nombre d'originex
et le nombren
dans leur représentation sous forme de chaîne.la source
Utilisez celui-ci:
La
Math.frac
fonction a ici 3 modes:C'est simple :)
la source
la source