2010-05-07 4 views
5

J'ajoute une fonctionnalité à mon programme dans laquelle l'utilisateur aura la possibilité de changer d'unité de mesure à tout moment, et de demander au programme de recalculer son entrée et sa sortie. Si les entrées de l'utilisateur indiquent 20lbs pour un article, il décide alors de travailler en kilogrammes, il peut sélectionner une option à tout moment, et le programme recalculera son entrée 20lb à 9Kg. Ensuite, s'il décide qu'il préfère travailler en onces, il convertirait ce 9 kg en 320 oz, et ainsi de suite.Unités de logique de conversion de mesures en C#

Quelle serait la manière la plus efficace et la plus efficace de s'y prendre? J'ai creusé mon cerveau en essayant de trouver un moyen de mettre en œuvre la bonne formule.

Répondre

14

Effectuez tous vos calculs en unités standard (ou les unités avec lesquelles vous préférez travailler).

  • Convertissez l'entrée de l'utilisateur de ce qu'elle souhaite en unités standard.
  • Effectuez le calcul en utilisant des unités standard.
  • Convertissez la réponse dans les unités souhaitées par l'utilisateur.

Seule l'interface utilisateur doit se soucier des conversions d'unité. Le reste du code n'a pas besoin de s'inquiéter à ce sujet.

+0

Je suis d'accord. Ne pas convertir de l'unité précédente, vous perdrez la précision. –

+2

... sinon votre atterrisseur va dépasser et s'envoler dans l'espace ou s'écraser dans la surface dans une boule de feu brillante! ;) – FrustratedWithFormsDesigner

+4

Je suggérerais d'utiliser les unités SI pour les informations stockées dans votre base de données (ou ce que vous stockez dans vos données). – msarchet

4

Enregistrer la valeur dans une unité de mesure connue en interne (par exemple, stocker tout en kg) et avoir des équations à convertir de/vers l'unité connue vers toutes les autres.

Fondamentalement, vous avez seulement besoin de convertir les unités pour l'affichage, tous vos calculs internes peuvent être effectués dans une seule unité.

Comme une balle courbe, F # a un intégré mécanisme UdM robuste si vous avez envie de pointe quelque chose à jouer avec ...

0

Dans un programme que j'ai travaillé sur nous avions des classes séparées dans un « parts » namespace, tels que Units.Torque ou Units.Length.

Si vous créez une classe comme Units.Weight et avez tous les facteurs de conversion comme valeurs const et les unités possibles comme énumération, vous pouvez simplement appeler cette classe et la convertir en unités désirées. Ceci est un exemple très basique du système que nous utilisons:

namespace Units 
{ 
    class Weight 
    { 
     public enum WeightType 
     { 
      kg, 
      lb 
     } 

     const double kgTolbs = 2.20462262; 

     public static double Convert(double value, WeightType fromUnits, WeightType toUnits) 
     { 
      //Code here to convert units 
     } 
    } 
} 

Avec cette structure, vous pouvez convertir et de l'un des types d'unités à votre guise.