版本号浮点数,小数或双精度数

时间:2010-11-12 13:41:05

标签: c# .net version-control document-management

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

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

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

如果版本号达到 0.9 且添加了次要版本,我希望该号码转到 0.10 而不是 1.0 ,当我添加它。这是最大的问题。

任何建议都表示赞赏。

感谢。

5 个答案:

答案 0 :(得分:17)

System.Version

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

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

Version

答案 1 :(得分:5)

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

答案 2 :(得分:2)

为此

制作您自己的数据类型
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;
  }
}

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

修改

为了更好的衡量标准,还添加了比较器逻辑:)

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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