Comment formater en nombre entier pour afficher des pourcent

Résolu/Fermé
Quicksilvain - Modifié le 4 sept. 2022 à 00:58
 Quicksilvain - 5 sept. 2022 à 09:43

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 15128 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 juin 2024 333
Modifié le 4 sept. 2022 à 00:29
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

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

0
yg_be Messages postés 22870 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024 1 474 > Quicksilvain
3 sept. 2022 à 20:08

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
Whismeril Messages postés 19056 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 12 juin 2024 914
4 sept. 2022 à 00:57

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 15128 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 juin 2024 333
4 sept. 2022 à 10:19

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

0

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 22870 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024 1 474
4 sept. 2022 à 15:51

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 22870 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024 1 474
4 sept. 2022 à 16:02

et avec

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

?

0

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
Whismeril Messages postés 19056 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 12 juin 2024 914
4 sept. 2022 à 16:27

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 22870 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024 1 474
4 sept. 2022 à 18:36

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
Whismeril Messages postés 19056 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 12 juin 2024 914 > yg_be Messages postés 22870 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024
4 sept. 2022 à 22:43

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

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
Whismeril Messages postés 19056 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 12 juin 2024 914
4 sept. 2022 à 17:44

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

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