"5" et "2" étant des entiers, c'est une division entière qui est réalisée.
Il suffirait de remplacer l'une des opérandes par "5.0" ou "2.0".
Version imprimable
"5" et "2" étant des entiers, c'est une division entière qui est réalisée.
Il suffirait de remplacer l'une des opérandes par "5.0" ou "2.0".
En effet cela fonctionne bien mais comment faire en sorte que "l'opération" entrée par l'utilisateur calcule avec des double directement ?
Car l'utilisateur ne va encoder que 5/2 et ne mettra jamais la valeur décimale nulle... :/
Je pourrais essayer de parser l'opération et ajouter les décimales manquantes mais est ce la bonne solution ?
Oui je sais bien Bluedeep mais le code convient tout à fait à ce que je recherches, je n'ai pas besoin de gérer plus de méthode de la classe statique Math :P
Tiens, un parseur rapide qui devrait régler tes problèmes d'arrondi (torché en 5mn, testé mais pas à fond) :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 private static string parseToEnforceDouble(string formula) { int pos = -1; bool lastIsDigit = false; // positionnement au premier nombre while (char.IsDigit(formula[++pos]) == false) ; formula += ' '; // sale !! while (pos < formula.Length) { char c = formula[pos]; if (char.IsDigit(c)) { lastIsDigit = true; pos++; } else { if (lastIsDigit) { if (c != '.' && c != 'd') { formula = formula.Insert(pos, "d"); pos++; } lastIsDigit = false; } pos++; } } return formula.Trim(); }
Voici la méthode que j'ai utilisé :
Tout en m'assurant que les , éventuelles soit transformées en . lors de l'encodage via l'évènement KeyPress.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 private String FormatOperation(string operation) { StringBuilder sb = new StringBuilder(); char[] oper = operation.ToCharArray(); Boolean PreviousIsDigit = false; for (int i = 0; i < oper.Length; i++) { if (char.IsDigit(oper[i])) { sb.Append(oper[i]); PreviousIsDigit = true; } else { if(PreviousIsDigit && oper[i] !='.') sb.Append('d'); sb.Append(oper[i]); PreviousIsDigit = false; } } return sb.ToString(); }
Je passes le sujet en résolu, merci à tous pour vos réactions et commentaires :)
Sinon il y a une autre technique qui utilise le eval de JScript, que j'avais déjà décrite ici