coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
26 nov. 2007 à 15:32
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
26 nov. 2007 à 20:58
Bonjour
je suis nouveau dans le monde du C#, pardonnez mes hesitations sur l'objet, le .net et autres choses qui me sont etrangeres...
je parcourais les blogs hier soir, et je suis tombe sur un post traitant du type "prix" sur sql server, je me suis dit que ca allait etre mon prochain code C#, car : ca met en oeuvre les generics et les overloadings d'operateurs (entre autre), donc ca me ferait le plus grand bien...
en Cpp, les templates permettraient de passer le nombre de decimales :
en C#, j'ai cru lire qu'on ne pouvait pas utiliser de nombres au travers des generics, (ca m'embete un peu pour passer le nombre de decimales)
Si vous avez une solution autre que : prendre une variable statique (si on traite deux unites a 1 ou 3 decimales ca peut poser probleme) ou une variable private (ca ferait carement trop lourd) ca m'interesse :)
Miltiades
Messages postés233Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 octobre 2010 26 nov. 2007 à 16:38
j'ai peur qu'il n'y ai rien pour forcer le nombre de decimal lors du calcul, par contre si c'est l'affichage au format monetaire qui t'interesse, regarde ca:
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 26 nov. 2007 à 18:31
>> en C#, j'ai cru lire qu'on ne pouvait pas utiliser de nombres au travers des generics
Qu'entends tu exactement par "utiliser des nombres au travers de generics" ? Ca fait longtemps que je n'ai pas touché au templates C++, mais de mémoire les genercis C# sont plutot équivalent (la syntaxe est juste "plus propre" à mon gout).
En C#, le type "Currency" n'existe pas de base, en général on utilise à la place le type Decimal - et peux tout a fait manipuler utilsier le type Decimal, Integer ou autre avec les generics (et pour l'affichage, tout est expliqué dans le lien ci dessus de Miltiades).
<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 26 nov. 2007 à 18:40
un exemple faisable en Cpp et apparement impossible en C# :
template <class T, int N, int P>
class Matrice{
ici, je fais une class pour gerer uniquement des matrices de taille N,P
apres avoir tape plusieurs classes templates, j'arrive a :
Matrice<Fraction, 4,3> d;
et tu vois, je ne passe pas QUE des classes comme parametres a ma template... je peux aussi passer un nombre qui sera "substitue" lors de la compilation de la meme maniere...
Si t'as du mal a voir l'interet d'une telle classe pour les prix, je peux te taper rapidement un exemple en Cpp, tu verras le code est court :)
J'ai aucun projet a realiser, c'est pour ca que le lien de miltiades ne me sert pas, je voulais m'entrainer en C#, l'interet de se detacher du Cpp c'est d'avoir une plus grande souplesse, on perd alors en vitesse d'execution, cependant, ici, il semble qu'on perde aussi en souplesse (remarque, en java c'est pire...) je me demandais donc si il y avait moyen de faire differement, peut-etre sans utiliser les templates, mais pour arriver a un resultat equivalent...
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 26 nov. 2007 à 19:01
En effet ce genre de chose n'est pour l'instant pas faisable en C#. Par contre, je veux bien un petit exemple pour voir dans quel cas ça peut être utile :)
(et eventuellement te proposer une alternative en C# si c'est possible...)
<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 26 nov. 2007 à 20:58
#include
template
class Prix{
public:
Prix(){
centimes=0;
};
Prix(double a){
centimes=(int)(a*N);
}
Prix<N,S>(int a){
centimes=a*N;
}
int getInt(){
return centimes/N;
}
int getPartCentimes(){
return centimes%N;
}
int getCentimes(){
return centimes;
}
void setCentimes(int a){
centimes=a;
}
Prix<N,S> operator+(Prix<N,S> a) const{
Prix<N,S> b;
b.setCentimes(centimes+a.getCentimes());
return b;
}
private:
int centimes;
};
template
std::ostream& operator<< (std::ostream& o, Prix<N, S> p){
int a=p.getPartCentimes();
o << p.getInt() << S << a;
if (a<10){
o<< 0;
}
return o;
}
int main(){
Prix<100, '$'> a, b(0.4), c;
Prix<100, 'e'> d(5);
a=4;
c=a+b;
std::cout << "a=" << a << "\n";
std::cout << "b=" << b << "\n";
std::cout << "c=" << c << "\n";
std::cout << "d=" << d << "\n";
return 0;
}
genre ici par exemple, t'as pas la possibilite de faire d=a+b; c'est pas possible, et c'est tant mieux....
c'est ce genre de contraintes que je recherche...
/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/