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

Par Geek Boy (GeekBoy), il y a 6 ans


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, il y a 6 ans

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
Geek Boy (GeekBoy), il y a 6 ans

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

Shizey, il y a 6 ans

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 }
Geek Boy (GeekBoy), il y a 6 ans

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(','));
Shizey, il y a 6 ans

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.

Geek Boy (GeekBoy), il y a 6 ans

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)