Obtenir la partie décimale d'un nombre avec JavaScript

J'ai des nombres flottants comme 3.2 et 1.6.

J'ai besoin de séparer le nombre dans la partie entière et décimale. Par exemple, une valeur de 3.2 serait scindé en deux numéros, c'est à dire 3 et 0.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

Ce Qui me manque ici?

175
demandé sur alex 2010-12-22 21:20:08

16 réponses

Utiliser 1, pas 2.

js> 2.3 % 1
0.2999999999999998
277
répondu Ignacio Vazquez-Abrams 2010-12-22 18:21:54
var decimal = n - Math.floor(n)

Bien que cela ne fonctionnera pas pour les nombres moins donc nous pourrions avoir à faire

n = Math.abs(n); // Change to positive
var decimal = n - Math.floor(n)
72
répondu greenimpala 2010-12-22 18:22:54

Vous pouvez convertir en chaîne, non?

n = (n + "").split(".");
53
répondu sdleihssirhc 2010-12-22 20:01:49

En quoi 0.2999999999999998 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 floor,%, etc indiquent que Javascript aime la fausse précision pour ces opérations. Donc, je pense que les réponses qui utilisent la conversion en chaîne sont sur la bonne voie.

Je ferais ceci:

var decPart = (n+"").split(".")[1];

Plus précisément, j'utilisais 100233.1 et je voulais la réponse".1".

23
répondu jomofrodo 2014-04-02 14:04:56

Une façon simple de le faire est:

var x = 3.2;
var decimals = x - Math.floor(x);
console.log(decimals); //Returns 0.20000000000000018

Malheureusement, cela ne renvoie pas la valeur exacte. Cependant, cela est facilement corrigé:

var x = 3.2;
var decimals = x - Math.floor(x);
console.log(decimals.toFixed(1)); //Returns 0.2

, Vous pouvez l'utiliser si vous ne savez pas le nombre de décimales:

var x = 3.2;
var decimals = x - Math.floor(x);

var decimalPlaces = x.toString().split('.')[1].length;
decimals = decimals.toFixed(decimalPlaces);

console.log(decimals); //Returns 0.2
9
répondu Ethan 2016-12-02 03:52:14

Voici comment je le fais, ce qui, je pense, est le moyen le plus simple de le faire:

var x = 3.2;
int_part = Math.trunc(x); // returns 3
float_part = Number((x-int_part).toFixed(2)); // return 0.2
9
répondu Zantafio 2017-03-04 12:11:21

Ce qui suit fonctionne indépendamment des paramètres régionaux pour le séparateur décimal... à la condition qu'un seul caractère soit utilisé pour un séparateur.

var n = 2015.15;
var integer = Math.floor(n).toString();
var strungNumber = n.toString();
if (integer.length === strungNumber.length)
  return "0";
return strungNumber.substring(integer.length + 1);

Ce n'est pas joli, mais c'est exact.

5
répondu cdmdotnet 2015-06-17 23:17:51

Vous pouvez le convertir en une chaîne et utiliser la méthode replace pour remplacer la partie entière par zéro, puis convertir le résultat en un nombre:

var number = 123.123812,
    decimals = +number.toString().replace(/^[^\.]+/,'0');
4
répondu gion_13 2013-03-27 20:57:56

En fonction de l'utilisation que vous donnerez par la suite, mais cette solution simple pourrait également vous aider.

Je ne dis pas que c'est une bonne solution, mais pour certains cas concrets fonctionne

var a = 10.2
var c = a.toString().split(".")
console.log(c[1] == 2) //True
console.log(c[1] === 2)  //False

Mais cela prendra plus de temps que la solution proposée par @ Brian M. Hunt

(2.3 % 1).toFixed(4)
4
répondu David Sánchez 2014-07-24 08:19:45

Manière indépendante de la langue:

var a = 3.2;
var fract = a * 10 % 10 /10; //0.2
var integr = a - fract; //3

Notez qu'il corrige uniquement pour les nombres avec une longueur fractioanale)

3
répondu Nurlan 2016-01-22 10:35:21

Si la précision est importante et que vous avez besoin de résultats cohérents, voici quelques propositions qui retourneront la partie décimale de n'importe quel nombre sous forme de chaîne, y compris le PREMIER "0.". Si vous en avez besoin en tant que flottant, ajoutez simplement var f = parseFloat( result ) à la fin.

Si la partie décimale est égale à zéro, "0.0" sera retourné. Les nombres Null, NaN et undefined ne sont pas testés.

1. Tableau.split

var nstring = (n + ""),
    narray  = nstring.split("."),
    result  = "0." + ( narray.length > 1 ? narray[1] : "0" );

2. Chaîne.sous-chaîne, Chaîne.indexOf

var nstring = (n + ""),
    nindex  = nstring.indexOf("."),
    result  = "0." + (nindex > -1 ? nstring.substring(nindex + 1) : "0");

3. Mathématique.étage, Nombre.toFixed, Chaîne.indexOf

var nstring = (n + ""),
    nindex  = nstring.indexOf("."),
    result  = ( nindex > -1 ? (n - Math.floor(n)).toFixed(nstring.length - nindex - 1) : "0.0");

4. Mathématique.étage, Nombre.toFixed, chaîne.split

var nstring = (n + ""),
    narray  = nstring.split("."),
    result  = (narray.length > 1 ? (n - Math.floor(n)).toFixed(narray[1].length) : "0.0");

Voici un lien jsPerf: https://jsperf.com/decpart-of-number/

Nous pouvons voir que la proposition #2 est la plus rapide.

3
répondu Gabriel Hautclocq 2018-01-17 14:52:14

Vous pouvez utiliser parseInt() function pour obtenir la partie entière de l'utiliser pour extraire la partie décimale

var myNumber = 3.2;
var integerPart = parseInt(myNumber);
var decimalPart = myNumber - integerPart;
2
répondu Sheki 2018-06-18 07:41:45

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 comme un entier, donc j'ai fini par utiliser ce genre d'approche:

var number = 3.1,
    decimalAsInt = Math.round((number - parseInt(number)) * 10); // returns 1

Cela fonctionne bien aussi avec des entiers, renvoyant 0 dans ces cas.

1
répondu walpek 2016-02-22 12:33:35

J'utilise:

var n = -556.123444444;
var str = n.toString();
var decimalOnly = 0;

if( str.indexOf('.') != -1 ){ //check if has decimal
    var decimalOnly = parseFloat(Math.abs(n).toString().split('.')[1]);
}

Entrée: -556.123444444

Résultat: 123444444

1
répondu DavidDunham 2017-11-16 10:48:17

Après avoir regardé plusieurs d'entre eux, j'utilise maintenant...

var rtnValue = Number(7.23);
var tempDec = ((rtnValue / 1) - Math.floor(rtnValue)).toFixed(2);
0
répondu Patrick 2016-04-17 17:45:58
float a=3.2;
int b=(int)a; // you'll get output b=3 here;
int c=(int)a-b; // you'll get c=.2 value here
-9
répondu user2381223 2013-05-14 10:32:33