Comment formater en nombre entier pour afficher des pourcent

Résolu
Quicksilvain -  
 Quicksilvain -

Salut a tous

Dans le code ci-dessous, pourquoi j'arrive pas a afficher des nombres entier ? au lieu de ça ça affiche des nombres decimaux..

Savez vous ou se trouve l'erreur ?

PS: Je debute 

Merci d'avance

        private void buttonTauxDeVariation_Click(object sender, EventArgs e)
        {
            string stringValueAchat = PositionAchatTextBox.Text.Trim().ToString();
            string stringValueVente = PositionVenteTextBox.Text.Trim().ToString();
            if (!string.IsNullOrEmpty(stringValueVente) && !string.IsNullOrEmpty(stringValueVente))
            {
                Double doubleValueVente = 0.0;
                Double doubleValueAchat = 0.0;

                if (Double.TryParse(stringValueVente, out doubleValueVente) && Double.TryParse(stringValueAchat, out doubleValueAchat))
                {

                    Double doubleResult2 = (doubleValueVente - doubleValueAchat) / (doubleValueAchat * 100);
                    ResultatTauxDeVariation.Text = " " + doubleResult2.ToString("##.## %");
                }
                else
                {
                    MessageBox.Show("Erreur: Veuillez entrer uniquement des nombres !",
                         "Calculatrice Crypto", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }


Windows / Chrome 105.0.0.0

A voir également:

7 réponses

NHenry Messages postés 15221 Date d'inscription   Statut Modérateur Dernière intervention   366
 
PositionAchatTextBox.Text.Trim().ToString();
//Tu peux retirer la fin 
PositionAchatTextBox.Text.Trim();
//Une chaine est une chaine.
//Peut être en remplaçant
doubleResult2.ToString("##.## %")
// Par
doubleResult2.ToString("## %")

A moins que j'ai pas compris.


0
Quicksilvain
 

Merci d'avoir repondu.. j'ai essayé mais ça fonctionne pas

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Quicksilvain
 

bonjour,

montre-nous le code complet que tu as essayé.  Avec un exemple de données, et le résultat obtenu.  Explique aussi le résultat attendu.

D'où vient ce code?  L'as-tu écrit?  A quelle ligne penses tu obtenir un résultat entier?

0
Utilisateur anonyme
 

Bonsoir à tous les 3.


Quicksilvain, je me suis permis de déplacer ta question dans le forum C#, car le code que tu montres est dans ce langage, pas en VB.

Évidemment, si tu le testes dans un projet VB, ça ne peut pas marcher.

Si et seulement si ton projet est du VB.Net, ça se traduit (car en vrai VB.Net ce n'est pas du VB, c'est du C# avec une "skin" vb) https://search.brave.com/search?q=C%23+to+VB&source=desktop par contre, si ton projet, c'est du VBA, du VB6 ou du VBScript, c'est mort.

Ici, voir mon commentaire

                Double doubleValueVente = 0.0;// tu n'as pas besoin d'initialiser une valeur, car ensuite, tu l'utilises dans TryParse avec le modificateur "out" qui veut dire "peut importe ce que ça vaut en entrée, ça ne sert qu'en sortie". Mais si tu veux absoluement y mettre une valeur initiale ou valeur par défaut, si le tryParse échoue, 0 suffit, la variable est de type double, donc le compilateur "sait" que c'est 0.0 et pas le int 0
                Double doubleValueAchat = 0.0; //idem

                if (Double.TryParse(stringValueVente, out doubleValueVente) && Double.TryParse(stringValueAchat, out doubleValueAchat))

Quand tu dis

 j'ai essayé mais ça fonctionne pas

Ça veut dire quoi pour toi ?

  • Ça n'affiche pas un nombre formaté plus ou moins comme un pourcentage (je n'ai pas essayé, mais on dirait quand même que ça devrait faire ça) ?
  • Ça n'affiche pas le résultat que tu attends, genre achat 50, vente 56, plus-value + 12 % ? C'est certain, ça ne fait pas ça, ce n'est pas le calcul que tu as codé.
    • Ton calcul => (56-50)/(50*100) => 6 / 5000 => 0.0012 arrondi à 2 décimales 0.
    • Le bon calcul => (56-50) / 50 * 100 => 6/50 * 100, 0.12 * 100 => 12, arrondi à 2 décimales 12.

En plus 12% ce n'est pas la valeur "mathématique", si tu veux faire des calculs derrière, en principe, tu auras besoin de 0.12. Mais pour nous, simples humains, c'est plus parlant d'afficher 0.12 en pourcentage.

Dans ce cas,

double pourcent = 0.12
tbxPourcent.Text = pourcent.ToString("P");

https://docs.microsoft.com/fr-fr/dotnet/api/system.double.tostring?view=net-6.0


@ NHenri, depuis la mise à jour de l'éditeur de texte, la coloration C# ne marche plus, le meilleur compromis que j'ai trouvé, c'est C++, j'ai modifié ton message en conséquence. De même, pour VB, il faut mettre Basic et pas VBScript.


0
NHenry Messages postés 15221 Date d'inscription   Statut Modérateur Dernière intervention   366
 

Merci, j'avais un doute, j'essayerai d'y penser la prochaine fois :)

0
Quicksilvain
 

Merci Whismeril, Oui désolé je me suis trompé de section ;)

Encore une fois oui je me suis trompé dans le calcul il fallait bien supprimer les parenthèses.

Avec le bon calcul, et avec ce code ci-dessous si je fais  PositionAchat =  20 et PositionVente = 27  je trouve 3 500.00 %

ResultatTauxDeVariation.Text = " " + doubleResult2.ToString("##.## %");

Avec ce code ci-dessous si je fais  PositionAchat =  20 et PositionVente = 27  je trouve 3500 %

ResultatTauxDeVariation.Text = " " + String.Format("{0:##.##%}", doubleResult2);
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

bonjour,

Le résultat que tu obtiens, c'est celui que tu souhaites?

Sinon, peux-tu montrer les instructions que tu utilises pour faire le "bon calcul"?

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

et avec

ResultatTauxDeVariation.Text = " " + doubleResult2.ToString("##.##") + " %";

?

0
Quicksilvain
 

Non j'aimerais qu'il affiche 35 %

Voici le code complet

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Calculatrice_crypto
{
    public partial class Form1 : Form
    {
        private const string V = "#,#00.00";
        private const string V1 = "0.0";

        public Form1()
        {
            InitializeComponent();
        }
  
        private void buttonTauxDeVariation_Click(object sender, EventArgs e)
        {
            string stringValueAchat = PositionAchatTextBox.Text.Trim().ToString();
            string stringValueVente = PositionVenteTextBox.Text.Trim().ToString();
            if (!string.IsNullOrEmpty(stringValueVente) && !string.IsNullOrEmpty(stringValueVente))
            {
                Double doubleValueVente = 0.0;
                Double doubleValueAchat = 0.0;

                if (Double.TryParse(stringValueVente, out doubleValueVente) && Double.TryParse(stringValueAchat, out doubleValueAchat))
                {

                    Double doubleResult2 = (doubleValueVente - doubleValueAchat) / doubleValueAchat * 100;
                    ResultatTauxDeVariation.Text = " " + String.Format("{0:##.##%}", doubleResult2);

                }
                else
                {
                    MessageBox.Show("Erreur: Veuillez entrer uniquement des nombres !",
                         "Calculatrice Crypto", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 

Encore une fois oui je me suis trompé dans le calcul il fallait bien supprimer les parenthèses.

Comment ça encore une fois, tu n'en as pas parlé avant.

Pour afficher ton code, merci de sélectionner C++, et ça je l'ai déjà dit.

À part les parenthèses, le code que tu présentes ne tient compte d'aucune des préconisations que nous t'avons faites.

Peux-tu mettre un point d'arrêt à cette ligne

Double doubleResult2 = (doubleValueVente - doubleValueAchat) / doubleValueAchat * 100;

Et espionner les variables 

  • stringValueAchat
  • stringValueVente
  • doubleValueAchat
  • doubleValueVente

Et nous dire ce qu'il y a réellement dedans.


0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

Il suffit de retirer le % de la chaîne de format, comme suggéré en #8.

Console.WriteLine(String.Format("{0:##.##%}", 12));

affiche "1200%"

0
Utilisateur anonyme > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

ou d'utiliser "P" comme suggéré en #4.

C'est bien ce que j'ai dit, à part les parenthèse, il n'a tenu compte de rien de se qu'on a pu lui dire....

0
Quicksilvain
 

J'ai dis "encore une fois" car je me suis trompé de section et me suis aussi trompé dans le calcul.. Je me sis mal exprimé ;)

Il y a que "Inserer un extrait de code" lorsque je reponds, je trouve pas C++

Pouvez vous m'expliquer la procedure avec le point d'arrêt ?

0
Utilisateur anonyme
 

Pour utiliser correctement l'insertion d'extrait de code, voir ici

https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

Savoir déboguer est plus important que savoir coder, le point d'arrêt, c'est la base de la base du débogage.

Voir ici https://docs.microsoft.com/fr-fr/visualstudio/debugger/debugger-feature-tour?view=vs-2019

0
Quicksilvain
 

Merci Whismeril, je vais lire tout ça..

@yg_be, Votre suggestion (voir ci-dessous) était finalement la solution.. encore merci 

ResultatTauxDeVariation.Text = " " + doubleResult2.ToString("##.##") + " %";
0