web-dev-qa-db-fra.com

Comment analyser float avec deux décimales en javascript?

J'ai le code suivant. Je voudrais l'avoir tel que si price_result est égal à un entier, disons 10, alors je voudrais ajouter deux décimales. Donc 10 équivaudrait à 10,00 ... ou si 10,6 était égal à 10,6. Je ne sais pas comment faire ça.

price_result = parseFloat(test_var.split('$')[1].slice(0,-1));
349
user357034

Vous pouvez utiliser toFixed () pour le faire

var twoPlacedFloat = parseFloat(yourString).toFixed(2)
802
Mahesh Velaga

Lorsque vous utilisez toFixed, la valeur est toujours renvoyée sous forme de chaîne. Cela complique parfois le code. Pour éviter cela, vous pouvez créer une méthode alternative pour Number.

Number.prototype.round = function(p) {
  p = p || 10;
  return parseFloat( this.toFixed(p) );
};

et utilise:

var n = 22 / 7; // 3.142857142857143
n.round(3); // 3.143

ou simplement:

(22/7).round(3); // 3.143
42
Vlada

Si vous avez besoin de performance (comme dans les jeux):

Math.round(number * 100) / 100

C'est environ 100 fois plus vite que parseFloat (number.toFixed (2))

http://jsperf.com/parsefloat-tofixed-vs-math-round

39
Rob Boerman

Pour renvoyer un nombre, ajoutez une autre couche de parenthèses. Le garde propre.

var twoPlacedFloat = parseFloat((10.02745).toFixed(2));
8
pvanallen

Si votre objectif est d'analyser et que votre entrée peut être littérale, vous vous attendez à ce que float et toFixed ne le fournissent pas. Voici donc deux fonctions simples permettant de fournir ceci:

function parseFloat2Decimals(value) {
    return parseFloat(parseFloat(value).toFixed(2));
}

function parseFloat2Decimals(value,decimalPlaces) {
    return parseFloat(parseFloat(value).toFixed(decimalPlaces));
}
2
Savage

ceil de lodash est probablement le meilleur 

_.ceil("315.9250488",2) 
_.ceil(315.9250488,2) 
_.ceil(undefined,2)
_.ceil(null,2)
_.ceil("",2)

travaillera aussi avec un numéro et il est sûr

2
Antonio Terreno

@sd Réponse courte: Il n’ya aucun moyen dans JS d’avoir une valeur de type de données Number avec des zéros à la fin après une décimale.

Réponse longue: C'est la propriété de toFixed ou toPrecision fonction de JavaScript, pour renvoyer la chaîne. La raison en est que le type de données Number ne peut pas avoir une valeur telle que a = 2.00, il supprimera toujours les zéros de fin après la décimale. Il s'agit de la propriété intégrée du type de données Number. Donc, pour atteindre ce qui précède dans JS, nous avons 2 options

  1. Soit utiliser les données comme une chaîne ou
  2. Acceptez d'avoir tronqué la valeur avec le cas '0' à la fin ex 2.50 -> 2.5. Number Cannot have trailing zeros after decimal
1
abhinav pandey

S'il vous plaît utiliser la fonction ci-dessous si vous ne voulez pas arrondir.

function ConvertToDecimal(num) {
    num = num.toString(); //If it's not already a String
    num = num.slice(0, (num.indexOf(".")) + 3); //With 3 exposing the hundredths place
   alert('M : ' +  Number(num)); //If you need it back as a Number    
}
0
Nimesh

Pour ce que cela vaut: Un nombre décimal, est un nombre décimal, que vous l’entouriez d’une autre valeur ou non. En interne, il se rapprochera d'une fraction décimale selon la règle de l'arthrométique en virgule flottante et de sa manipulation. Il reste un nombre décimal (virgule flottante, dans JS un double) en interne, peu importe le nombre de chiffres avec lequel vous souhaitez l'afficher.

Pour le présenter à l'affichage, vous pouvez choisir la précision de l'affichage à votre guise par conversion de chaîne. La présentation est un problème d'affichage, pas de stockage.

0
andora

La solution qui fonctionne pour moi est la suivante

parseFloat(value)
0
Jorge Santos Neill
Solution for FormArray controllers 

Initialiser le générateur de formulaire FormArray

  formInitilize() {
    this.Form = this._formBuilder.group({
      formArray: this._formBuilder.array([this.createForm()])
    });
  }

Créer un formulaire

  createForm() {
    return (this.Form = this._formBuilder.group({
      convertodecimal: ['']
    }));
  }

Définir les valeurs de formulaire dans le contrôleur de formulaire

  setFormvalues() {
    this.Form.setControl('formArray', this._formBuilder.array([]));
    const control = <FormArray>this.resourceBalanceForm.controls['formArray'];
    this.ListArrayValues.forEach((x) => {
      control.Push(this.buildForm(x));
    });
  }

  private buildForm(x): FormGroup {
    const bindvalues= this._formBuilder.group({
      convertodecimal: x.ArrayCollection1? parseFloat(x.ArrayCollection1[0].name).toFixed(2) : '' // Option for array collection
// convertodecimal: x.number.toFixed(2)    --- option for two decimal value 
    });

    return bindvalues;
  }
0