J'ai des nombres flottants comme 3.2
et 1.6
.
Je dois séparer le nombre dans la partie entière et décimale. Par exemple, une valeur de 3.2
serait scindée en deux nombres, à savoir 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
Qu'est-ce qui me manque ici?
Utilisez 1
, pas 2
.
js> 2.3 % 1
0.2999999999999998
var decimal = n - Math.floor(n)
Bien que cela ne fonctionne pas pour des nombres moins, nous pourrions avoir à faire
n = Math.abs(n); // Change to positive
var decimal = n - Math.floor(n)
Vous pouvez convertir en chaîne, non?
n = (n + "").split(".");
Comment 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 est friand de 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 voudrais faire ceci:
var decPart = (n+"").split(".")[1];
Plus précisément, j'utilisais 100233.1 et je voulais la réponse ".1".
Voici comment je le fais, ce qui me semble être 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
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 retourne 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 utiliser ceci si vous ne connaissez 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
Ce qui suit fonctionne quels que soient les paramètres régionaux du séparateur décimal ... à la condition qu'un seul caractère est 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.
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 ne corrige que pour les nombres d'une longueur décimale)
Vous pouvez le convertir en chaîne et utiliser la méthode replace
pour remplacer la partie entière par zéro, puis reconvertir le résultat en un nombre:
var number = 123.123812,
decimals = +number.toString().replace(/^[^\.]+/,'0');
En fonction de l'utilisation que vous ferez après, mais cette solution simple pourrait également vous aider.
Je ne dis pas que c'est une bonne solution, mais pour des cas concrets, cela 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)
Si la précision compte et si vous souhaitez obtenir des résultats cohérents, voici quelques propositions qui renverront la partie décimale de tout nombre sous forme de chaîne, y compris le "0" initial. Si vous en avez besoin en tant que float, ajoutez simplement var f = parseFloat( result )
à la fin.
Si la partie décimale est égale à zéro, "0.0" sera renvoyé. Null, NaN et les nombres non définis ne sont pas testés.
var nstring = (n + ""),
narray = nstring.split("."),
result = "0." + ( narray.length > 1 ? narray[1] : "0" );
var nstring = (n + ""),
nindex = nstring.indexOf("."),
result = "0." + (nindex > -1 ? nstring.substring(nindex + 1) : "0");
var nstring = (n + ""),
nindex = nstring.indexOf("."),
result = ( nindex > -1 ? (n - Math.floor(n)).toFixed(nstring.length - nindex - 1) : "0.0");
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 n ° 2 est la plus rapide.
Vous pouvez utiliser la fonction parseInt()
pour obtenir la partie entière, puis celle-ci pour extraire la partie décimale.
var myNumber = 3.2;
var integerPart = parseInt(myNumber);
var decimalPart = myNumber - integerPart;
Dans un cas, 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, alors j’ai utilisé cette méthode:
var number = 3.1,
decimalAsInt = Math.round((number - parseInt(number)) * 10); // returns 1
Cela fonctionne bien aussi avec des entiers, retournant 0 dans ces cas.
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
Bien que je sois très en retard pour répondre à cette question, veuillez consulter le code.
let floatValue = 3.267848;
let decimalDigits = floatValue.toString().split('.')[1];
let decimalPlaces = decimalDigits.length;
let decimalDivider = Math.pow(10, decimalPlaces);
let fractionValue = decimalDigits/decimalDivider;
let integerValue = floatValue - fractionValue;
console.log("Float value: "+floatValue);
console.log("Integer value: "+integerValue);
console.log("Fraction value: "+fractionValue)
Après avoir examiné plusieurs d'entre eux, j'utilise maintenant ...
var rtnValue = Number(7.23);
var tempDec = ((rtnValue / 1) - Math.floor(rtnValue)).toFixed(2);
n = Math.floor(x);
remainder = x % 1;
Les fonctions mathématiques sont plus rapides, mais renvoient toujours des valeurs attendues non natives. Le moyen le plus simple que j'ai trouvé est
(3.2+'').replace(/^[-\d]+\./, '')