版本号float,decimal或double

我有一个文档管理系统,其中文档可以有多个版本。 保存每个版本,用户可以查看版本历史记录。

我想知道的是: 我应该使用什么数据类型的版本号? 十进制,浮点数还是双倍? 我正在使用.NET和C#。

版本号从0.1开始,每个发布的主要版本将四舍五入到下一个整数。 即0.4到1.0,1.3到2.0等。

当版本号达到0.9并且添加了次要版本时,我希望当我添加它时,该数字将变为0.10而不是1.0 。 这是最大的问题。

任何建议表示赞赏。

谢谢。

System.Version

这已经存储了不同的部分,处理它作为字符串呈现(修订和构建组件仅用于显示,如果它们非零,所以它们与你的情况无关)并且(最好的)已经是其他.NET开发人员理解,并且不会导致混淆(如果我看到一些版本号不是System.Version我会花一些时间然后试图弄清楚为什么Version不够好对于这项工作,如果事实certificate是重要的并且隐藏了一个令人讨厌的惊喜。如果它对于这份工作来说已经足够好了,我会对开发人员浪费我的时间感到恼火)。

您可以使用扩展方法轻松处理所需的方法:

 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); } 

两个整数怎么样? 一个用于主要修改,一个用于次要修订?

为此创建自己的数据类型

 public struct VersionNumber : IComparable { public int MajorVersion{get;set;} public int MinorVersion{get;set;} public VersionNumber( int major, int minor) { MajorVersion = major; MinorVersion = minor; } public override string ToString(){ return major + '.' + minor; } public int CompareTo(VersionNumber other) { int result; result = MajorVersion.CompareTo(other.MajorVersion); if (result != 0) { return result; } return MinorVersion.CompareTo(other.MinorVersion); } public static bool operator <(VersionNumber left, VersionNumber right) { return left.CompareTo(right) < 0; } public static bool operator <=(VersionNumber left, VersionNumber right) { return left.CompareTo(right) <= 0; } public static bool operator >(VersionNumber left, VersionNumber right) { return left.CompareTo(right) > 0; } public static bool operator >=(VersionNumber left, VersionNumber right) { return left.CompareTo(right) >= 0; } } 

您还可以添加比较器,以便检查两个版本号,以查看哪个版本号是两个版本号的最高版本。

编辑

添加比较器逻辑也很好:)

我建议两个整数:一个主要和一个小调。 如果你想要一个变量,你甚至可以将它存储为major * 1000 + minor

十进制应该是上面给出的最好的,但正如其他人所指出的那样,两个整数会更好。

双打和浮点数不能准确存储所有小数值,你不希望你的版本突然变成1.219999999999999999