12
votes

Version numéros flottants, décimales ou doubles

J'ai un système de gestion de documents où les documents peuvent avoir plusieurs versions. Chaque version est enregistrée et que les utilisateurs peuvent voir l'historique de la version.

Ce que j'aimerais savoir est: Quel type de données dois-je utiliser pour les numéros de version? Décimal, flotter ou double? J'utilise .NET et C #.

Les numéros de version commencent à 0,1 et chaque version la version majeure sera arrondi au prochain numéro entier. C'est-à-dire << strong> 0,4 ​​ va à 1.0 et 1.3 va à 2.0 etc.

Quand une version de version frappe 0,9 et une la version mineure est ajoutée que je souhaiterais que le nombre d'aller à 0,10 pas 1.0 , quand j'ajoute. C'est le problème le plus important.

Toutes les suggestions sont appréciées.

merci.


0 commentaires

5 Réponses :


5
votes

Que diriez-vous de deux entiers? Un pour le majeur et celui des révisions mineures?


0 commentaires

1
votes

Je suggérerais deux entiers: un majeur et un mineur. Vous pouvez même stocker cela comme majeur * 1000 + mineur si vous voulez une variable.


0 commentaires

1
votes

Decimal devrait être le meilleur de ce qui précède, mais comme une autre a noté que deux INT seraient mieux.

Doubles et flotteurs ne stocke pas avec précision toutes les valeurs décimales, vous ne voulez pas que votre version soit soudainement 1.21999999999999999999999999999


0 commentaires

2
votes

Créez votre propre type de données pour ce xxx

Vous pouvez également ajouter un comparateur afin que vous puissiez vérifier deux numéros de version pour voir la version la plus élevée de deux numéros de version par exemple. < / p>

edit

a ajouté la logique de comparateur également pour une bonne mesure :)


3 commentaires

Enfin, j'ai une raison d'utiliser une structure. Merci.


J'aimerais que je puisse + la réponse de Jon Hanna à nouveau. Ne réinventez pas la roue


Je n'étais pas au courant de la classe System.Vversion, j'ai donc appris quelque chose ici aussi. Je n'ai pas intentionnellement réinventé la roue. Je ne savais pas que la roue existait déjà :)



20
votes

system.version code>

Ceci stocke déjà les différentes pièces, les traite de la présentant comme une chaîne (révision et composants de construction ne sont utilisés que dans l'affichage si elles ne sont pas nulles. Dans votre cas, cela n'a pas d'importance) et (meilleur de tous) est déjà compris par d'autres développeurs .NET et ne conduira pas à la confusion (si j'ai vu une utilisation d'un numéro de version qui n'était pas un système . Version code> Je passerais un peu de temps à essayer de déterminer pourquoi version code> n'était pas assez bon pour le travail, au cas où cela s'est avéré important et cachait une mauvaise surprise. Si c'était suffisamment bon. Si c'était suffisamment bon. Pour le travail, je serais irrité au développeur qui gaspillant mon temps comme ça). P>

Vous pouvez traiter les moyens que vous souhaitez facilement avec des méthodes d'extension: P>

public static Version IncrementMajor(this Version ver)
{
  return new Version(ver.Major + 1, 0);
}
public static Version IncrementMinor(this Version ver)
{
  return new Version(ver.Major, ver.Minor + 1);
}


5 commentaires

Je ne sais pas pourquoi votre solution est si faible marquée. À mon avis, nous devrions toujours utiliser des implémentations existantes lorsque cela est possible.


J'aimerais donner à son uppote, mais j'ai utilisé mon quota pour la journée, je dois donc revenir et ajouter un uppote demain. Clairement la meilleure réponse ici.


Au moins bien que l'OP a changé la coche de ma réponse à Jon Hanna à sa réponse est indiquée au sommet.


Quel ver.minor est une valeur maximale?


@Eveny, tu veux dire que ce qui se passerait si ver.minor a été défini à int.maxvalue lorsque vous avez appelé incrémentminor ? Vous obtiendrez soit une erreur de débordement, soit une erreur de débordement ou une modification de int.minvalue en fonction du coché ou non vérifié contexte. Cela faciliterait la compilation de ce qui précède cochée (la valeur par défaut) pour vous assurer que l'exception se produirait, une bonne idée.