Problème React Native firebase input conversion int ou décimal

Ce sujet est résolu
Default
,

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éponse

171316
,

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
}
171316
,

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
Default
,

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

Default
,

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(','));
171316
,

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.

Default
,

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)