Fonction If Else simple pour un calcul.

frenchefrenche Membre
septembre 2011 modifié dans Vos applications #1
Bonjour à  vous tous.


Je suis bloqué sur une application de calcul.
Je n'arrive pas à  résoudre un truc qui doit être tout simple, mais je suis novice....

Voici une copie de mon bout de code.

float Ac;<br />&nbsp; &nbsp; if (fieldNV2!=0) {<br />&nbsp; &nbsp; &nbsp; &nbsp; Ac = c/(a/b);<br />&nbsp; &nbsp; } else {<br />&nbsp; &nbsp; &nbsp; &nbsp; Ac = d;<br />&nbsp; &nbsp; };<br />&nbsp; &nbsp; fieldNV2.text = [NSString stringWithFormat: @&quot;%f&quot;,Ac];



Ce que je souhaite faire si vérifier si un champ de saisie (fieldNV2) est rempli ou pas.
Si il n'y est pas un calcul doit se faire pour la remplir Ac=c/(a/b).
Si elle est rempli ne rien faire.

Et au passage, tous mes résultats sont affichés avec un grand nombre de chiffres après la virgule, comment faire pour réduire à  trois chiffres.


Dév sous Xcode 4.1 et pour IOS 4.3.

Merci à  tous d'avance.

Réponses

  • Eric P.Eric P. Membre
    06:15 modifié #2
    Bonsoir,

    Pour tester si le champ est vide, il faut vérifier la longueur de son texte.
    fieldNV2!=0 ne fonctionne pas.
  • AliGatorAliGator Membre, Modérateur
    06:15 modifié #3
    En fait [tt]fieldNV2!=0[/tt] vérifie si la variable qui pointe sur ton champ n'est pas nulle... autrement dit si tu as une variable qui pointe sur un champ qui existe.

    Ce que tu veux c'est tester si le texte de ton champ est vide. Donc tester [tt]fieldNV2.text[/tt] et non directement [tt]fieldNV2[/tt].
    Après, le plus simple pour tester si ce texte est vide, comme dit Eric, c'est de tester si la longueur est égale à  zéro :[tt]if ([fieldNV2.text length]!=0)[/tt].
    Sinon tu peux aussi comparer avec la chaà®ne vide "", mais il faut penser à  comparer avec la méthode [tt]isEqualToString:[/tt] (ne jamais faire de comparaison de NSObject avec "==") : [tt]if ([fieldNB2.text isEqualToString:@";"])[/tt] (mais je te conseille plutôt de tester la longueur comme dit Eric, c'est plus simple et plus rapide)
  • frenchefrenche Membre
    septembre 2011 modifié #4
    Merci pour vos réponses.

    J'ai finalement réussis avec

    float Ac;
        if ([fieldNV2.text isEqualToString:@";"]) {
            Ac = c/(a/b);
        }else {
            Ac = d;
        };
        fieldNV2.text = [NSString stringWithFormat: @%f,Ac];

    Merci AliGator

    Bonne soirée.
  • muqaddarmuqaddar Administrateur
    06:15 modifié #5
    N'oublie pas de formatter ton code dans les messages. C'est plus lisible.
  • laudemalaudema Membre
    06:15 modifié #6
    dans 1316117349:

    Et au passage, tous mes résultats sont affichés avec un grand nombre de chiffres après la virgule, comment faire pour réduire à  trois chiffres.

    NSLog c'est comme printf à  part le %@ pour les objets et donc les mêmes règles s'appliquent :
    <br />fieldNV2.text = [NSString stringWithFormat: @&quot;%.3f&quot;,Ac];<br />
    

  • iSofTomiSofTom Membre
    06:15 modifié #7
    et pour avoir exactement 3 chiffres après la virgule, tu peux faire
    <br />fieldNV2.text = [NSString stringWithFormat: @&quot;%.3f&quot;,Ac];<br />
    


    Edit:
    grilled
  • AliGatorAliGator Membre, Modérateur
    06:15 modifié #8
    dans 1316121874:

    float Ac;<br />&nbsp; &nbsp; if ([fieldNV2.text isEqualToString:@&quot;&quot;]) {<br />&nbsp; &nbsp; &nbsp; &nbsp; Ac = c/(a/b);<br />&nbsp; &nbsp; }else {<br />&nbsp; &nbsp; &nbsp; &nbsp; Ac = d;<br />&nbsp; &nbsp; };<br />&nbsp; &nbsp;  fieldNV2.text = [NSString stringWithFormat: @&quot;%f&quot;,Ac];
    

    J'espère que tu t'es assuré avant de faire le calcul que ni a ni b ne sont nuls (sinon crash assuré bien sûr sur une division par zéro)
  • BunoBuno Membre
    06:15 modifié #9
    Hello,
    Plutôt que de faire un if simple comme ceci, j'utilise l'opérateur ternaire "?", ce qui revient, dans ton cas à  ceci:
    <br />// ici, test si b et a/b non nuls<br />float Ac = [fieldNV2.text isEqualToString:@&quot;&quot;] ? c/(a/b) : d;
    
  • AliGatorAliGator Membre, Modérateur
    06:15 modifié #10
    Entre nous autant j'aime bien l'opérateur ternaire pour des conditions simples, autant là  je trouve plus clair d'écrire un if/else (surtout s'il débute, chaque astuce en son temps)
  • frenchefrenche Membre
    06:15 modifié #11
    Merci à  tous.

    J'ai préféré rester sur une fonction If et Else plus simple pour moi dans l'immédiat si je dois reprendre mes calculs.
  • SethySethy Membre
    06:15 modifié #12

    Histoire de rajouter mon grain de sel : c / (a/b) est (à  une condition aux limites près) égal à  (c * b) / a

    Une multiplication est beaaaaaacoup plus rapide qu'une division et, de plus, si b est nul tu obtiens bien 0 comme réponse et pas une erreur.

    Sethy
  • BunoBuno Membre
    06:15 modifié #13
    Ah oui, c'est pas faux, tiens  :D
Connectez-vous ou Inscrivez-vous pour répondre.