Partie relative d'un decimal

Signaler
Messages postés
87
Date d'inscription
dimanche 22 octobre 2006
Statut
Membre
Dernière intervention
22 février 2008
-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Bonjour à tous et à toutes,

Mon problème est le suivant :

Je voulais récupérer la partie relative d'un décimal donné, alors j'ai développé une petite fonction pour cela : la fonction est la suivante :

public

string partie_relative(
decimal d){

string s="";

int partie_entiere=(
int)d;

decimal a=Math.Abs(d*100-(partie_entiere*100));

int partie_relative=(
int)a;

if(partie_relative==0) s="00";

//s=partie_entiere.ToString()+"."+partie_relative.ToString();

else{

if(partie_relative>=1 && partie_relative<=9){

s=partie_relative.ToString();

s="0"+partie_relative.ToString();

}

elses=partie_relative.ToString();

}

return s;}

 ça marche bien mais quand je voulais dessiner cette partie relative (surtout si la partie relative est entre 0 et 9) de gauche à droite (par exemple : 12.09 alors dessiner 09), alors l'affichage est renversé : pour l'exemple précédent : 90 au lieu de 09. 

Si quelqu'un a une idée ?

Merci d'avance.

choukri175

 
A voir également:

11 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Salut

Je pense qu'il faut plutot nous montrer ton code de dessin, sachant que le code que tu nous présente fonctionne (et donc ca marche aussi pour le dessiner avec un simple DrawString)

Mx
MVP C# 
Messages postés
87
Date d'inscription
dimanche 22 octobre 2006
Statut
Membre
Dernière intervention
22 février 2008

Le code du dessin est le suivant :


LinearGradientBrush myBrush = new LinearGradientBrush(ClientRectangle, Color.Black,Color.Black, LinearGradientMode.Horizontal);


Font f3= new Font("Tahoma", 10, FontStyle.Regular);




StringFormat objFormat=new StringFormat();


objFormat.FormatFlags=StringFormatFlags.DirectionRightToLeft;


PointF objPoint_partie_relative=new PointF(550,270);


e.Graphics.DrawString(partie_relative+".",f3,myBrush,objPoint_partie_relative,objFormat);

Merci.

Choukri175
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
Salut,
La méthode que tu as fait est un sacré bricolage! Voici mieux:

decimal dec = 43.23M;
string xx = string.Format("{0:0.00}", dec).Split('.')[1];

Il faudrait encore s'assurer que c'est bien le '.' qui est définit pour séparer la partie entière de la partie décimale (cf. Culture).

<hr />
-Blog-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Pour ma part je ne constate pas de probleme ! (a part que je ne comprends pas pourquoi tu utilises "RightToLeft" pour le StringFormat).

Mx
MVP C# 
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
" (...) l'affichage est renversé : pour l'exemple précédent : 90 au lieu de 09."
Ben avec un rightToLeft, c'est normal non?

<hr />
-Blog-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Meme pas Bidou,
Si tu testes, tu verras qu'en appelant la méthode partie_relative dans le DrawString, le nombre est toujours dans le bon sens malgrè le RightToLeft ^^ (mais le '.' s'inverse bien)

Mx
MVP C# 
Messages postés
87
Date d'inscription
dimanche 22 octobre 2006
Statut
Membre
Dernière intervention
22 février 2008

Bonsoir,

Qu'est ce que je dois faire?

C'est bizzare!!!!

Choukri175
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Utiliser la formule que te donne bidou dans ta fonction : string.Format("{0:0.00}", dec).Split('.')[1];

Puis dans ta fonction de dessin : e.Graphics.DrawString(partie_relative(tonDecimal), ....); sans le StringFormat

Mx
MVP C# 
Messages postés
87
Date d'inscription
dimanche 22 octobre 2006
Statut
Membre
Dernière intervention
22 février 2008

Je l'ai utilisée mais ça m'a donné une erreur d'exécution :

L'index se trouve en dehors des limites du tableau.

Merci

choukri175
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
remplace '.' par ',' (ce que te disait Bidou)

Mx
MVP C# 
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
Mouais faut faire attention avec ce genre de truc, si tu déploies ton application sur d'autres système tu vas avoir des surprises héhé. Faudrait prendre en compte la Culture pour qu'il split sur le bon caractère...

<hr />
-Blog-