Bonjour,

Voila je rencontre un petit problème avec mon code , je fait une petite application de gestion dépenses avec React Native et firebase
, lors de l'ajout d'une dépense , je saisi la somme dans un input , mais react native l'enregistre comme une string, donc quand je l'enregistre dans firebase je veux qui le transforme en chiffre entier ou décimal , mais cela fonctionne que pour les chiffres entier , ma question c'est comment faire avec une librairie ou autre qui transforme ma chaine en int , ou float automatiquement ? , merci à vous pour votre aide

Ce que je fais

addDepense() {
let depense = {
userId: this.state.userId,
title: upperFirst(this.state.title),
date: this.state.date,
somme: toNumber(this.state.somme),
recurrenceName: this.state.recurrenceName,
recutrenceId: this.state.recurrenceId,
categorie: this.state.categorieName,
description: upperFirst(this.state.description)
};
const db = firebase.firestore();
db.collection('depenses').add(depense);
Actions.depenses();
}

6 réponses


Shizey
Réponse acceptée

Hey, il existe includes pour détecter si quelque chose est contenue dans une autre tu pourrais t'en servir sa donnerai un truc du genre :

//tu détecte si il y a une virgule (tu peux mettre un point je ne sais pas comment est formaté ton prix)
if(prix.includes(",")){
//tu utilisera le parseFloat
}else{
//tu utilise le parseInt
}

Je ne sais pas si tu a déjà essayer mais en JS tu peux parse n'importe quelle valeur en float ou int comme ça :

var Texte_a_changer_en_nombre = '42px';
var nombre = parseInt(Texte_a_changer_en_nombre, 10);
// Retourne 42
var Texte_a_changer_en_nombre_a_virgule = '3.14deschoses';
var nombre_a_virgule = parseFloat(Texte_a_changer_en_nombre_a_virgule);
// Retourne 3.14

Merci pour ta réponse , mais le truc c'est que défois c'est un chiffre entier ou a virgule , se sont des sommes , et sachant que le input retourne une string , je recherche une methode pour convertir ma chaine en int ou float automatiquement

Bonsoir Shizey merci pour ta réponse , j'ai tenté ça

  let depense = {
                 somme:
                 this.state.somme.includes(',')  ?
                 parseFloat(this.state.somme): parseInt(this.state.somme),
                 xxxx:xxxx,
                 xxxx:xxxx
   }

maleuresement quand c'est un nombre à virgule ça ne fonctionne pas , je précise bien que dans mon state c'est bien par exemple "20,50" en string , il me le transforme en 20 , et pas pas en 20.50 en float , quand je test aprés le render , il me return bien true quand je fait

parseFloat ne fonctionne pas il ne fait rien

  console.log('somme à virgule ?', somme.includes(','));

Bonsoir, après verification, le test pour verifier si il s'agit d'un nombre à virgule ou non est innutile puisque le parseFloat gère aussi bien les décimales que les entiers. J'espère que cela pourra t'aider dans ta demarche.

oui exact je viens de trouver la solution , enfaite il faut remplacer la virgule par un point ,merci à toi de m'avoir aiguiller

this.state.somme.includes(',')
        ? parseFloat(this.state.somme.replace(',', '.'))
        : parseInt(this.state.somme)