我有一个文档管理系统,其中文档可以有多个版本。每个版本都被保存,用户可以查看版本历史。
我想知道的是:我应该为版本号使用什么数据类型?十进制,浮点数还是双精度数?我正在使用 .NET 和 C#。
版本号从0.1开始,每个已发布的主要版本将四舍五入到下一个整数。即0.4到1.0和1.3到2.0等等。
当版本号达到0.9并添加了次要版本时,我希望该数字变为0.10而不是1.0,当我添加它时。这是最大的问题。
任何建议表示赞赏。
谢谢。
我有一个文档管理系统,其中文档可以有多个版本。每个版本都被保存,用户可以查看版本历史。
我想知道的是:我应该为版本号使用什么数据类型?十进制,浮点数还是双精度数?我正在使用 .NET 和 C#。
版本号从0.1开始,每个已发布的主要版本将四舍五入到下一个整数。即0.4到1.0和1.3到2.0等等。
当版本号达到0.9并添加了次要版本时,我希望该数字变为0.10而不是1.0,当我添加它时。这是最大的问题。
任何建议表示赞赏。
谢谢。
System.Version
这已经存储了不同的部分,处理将其呈现为字符串(修订和构建组件仅在非零时用于显示,因此它们与您的案例无关)并且(最重要的是)已经其他 .NET 开发人员理解,并且不会导致混淆(如果我看到某些版本号的使用不是System.Version
我会花一些时间尝试找出为什么Version
对这项工作还不够好,以防万一这被证明很重要并隐藏了一个令人讨厌的惊喜。如果它足以胜任这项工作,我会对开发人员这样浪费我的时间感到恼火)。
您可以使用扩展方法处理您想要轻松递增的方法:
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<ReleaseNumber>
{
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