Création d'une famille de conversion simple et ajout d'unités (C++)
Remonter à Conversion de mesures (C++)
Sommaire
Vous pouvez, par exemple, créer une nouvelle famille de conversion et ajouter de nouveaux types de mesure lorsque vous effectuez des conversions entre de longues périodes de temps (mois ou siècles), où une perte de précision peut se produire.
Pour mieux comprendre, la famille cbTime utilise un jour comme unité de base. L'unité de base est celle utilisée pour effectuer toutes les conversions à l'intérieur de cette famille. Donc, toutes les conversions doivent être faites en jours. Une inexactitude peut se produire lors de conversions utilisant comme unités le mois ou plus (année, décennie, siècle, millénaire), car la conversion entre jours et mois, jours et années, et ainsi de suite, n'est pas une conversion exacte. Les mois ont différentes longueurs, les années ont des facteurs de correction pour les années bissextiles, les secondes supplémentaires, et ainsi de suite.
Si vous utilisez seulement des unités de mesure égales ou supérieures au mois, vous pouvez créer une famille de conversion plus précise en prenant l'année comme unité de base. Cet exemple crée une nouvelle famille de conversion appelée cbLongTime.
Déclarer les variables
D'abord, vous devez déclarer les variables pour les identificateurs. Les identificateurs sont utilisés dans la nouvelle famille de conversion LongTime et les unités de mesure qui sont ses membres :
tConvFamily cbLongTime;
TConvType ltMonths;
TConvType ltYears;
TConvType ltDecades;
TConvType ltCenturies;
TConvType ltMillennia;
Recenser la famille de conversion
Ensuite, recensez la famille de conversion :
cbLongTime = RegisterConversionFamily("Long Times");
Bien qu'une procédure UnregisterConversionFamily soit fournie, vous n'avez pas besoin de dérecenser les familles de conversion, à moins que l'unité qui les définit soit retirée à l'exécution. Elles sont automatiquement nettoyées quand votre application s'arrête.
Recenser les unités de mesure
Ensuite, vous devez recenser les unités de mesure dans la famille de conversion que vous venez de créer. Vous utilisez la fonction RegisterConversionType, qui recense les unités de mesure au sein d'une famille spécifiée. Vous devez définir l'unité de base qui est l'année dans cet exemple, et les autres unités sont définies en utilisant un facteur indiquant leur relation avec l'unité de base. Ainsi, le facteur pour ltMonths est 1/12 puisque l'unité de base pour la famille LongTime est l'année. Vous incluez aussi la description des unités vers lesquelles vous effectuez la conversion.
Le code de recensement des unités de mesure est le suivant :
ltMonths = RegisterConversionType(cbLongTime, " Months ", 1 / 12);
ltYears = RegisterConversionType(cbLongTime, " Years ", 1);
ltDecades = RegisterConversionType(cbLongTime, " Decades ", 10);
ltCenturies = RegisterConversionType(cbLongTime, " Centuries ", 100);
ltMillennia = RegisterConversionType(cbLongTime, " Millennia ", 1000);
Utiliser les nouvelles unités
Vous pouvez maintenant utiliser les unités que vous venez de recenser afin d'effectuer des conversions. La fonction Convert globale peut effectuer la conversion entre tous les types de conversion que vous avez recensés avec la famille de conversion cbLongTime.
Ainsi, au lieu d'utiliser l'appel Convert suivant,
Convert(StrToFloat(Edit1->Text), tuMonths, tuMillennia);
vous pouvez à présent utiliser celui-ci pour une meilleure précision :
Convert(StrToFloat(Edit1->Text), ltMonths, ltMillennia);