“正确”.Net数据类型用于存储0.0-1.0

时间:2011-04-16 14:30:17

标签: .net types

我在很多地方使用0.0-1.0范围。一些例子包括:

报告进度(0 =开始,0.5 = 50%完成,1 =完成),2个对象之间的比较(0 =不匹配,0.95 =非常相似,1 =相同)等。

我更喜欢避免在任何固定范围(0-100)内的整数作为a)示例中的100感觉任意,b)非离散值如12.5?

目前,我使用双倍强迫自己参加0<=x<=1

的约定

这很好但我现在正在编写一个支持插件和插件报告处理进度的应用程序。目前,这是由double报告的,如果值超出范围,应用程序会抛出异常。我真正想要的是一种数据类型,它隐含地将值限制为0-1或Min-Max或类似范围内的任何值

注意:我知道所有数据类型都具有最大分辨率。我也知道在大多数情况下整数0-100可能足够接近 - 但是这样做的正确方法是什么?

4 个答案:

答案 0 :(得分:0)

使用枚举。否则,您的代码将会出现magic numbers

答案 1 :(得分:0)

如果插件报告Min到Max范围内的进度,您可以将其转换为0-1范围,如下所示:

((double) progressValue + (double) Min) / (double) (Max - Min)

或者如果更有可能进度值在0到Max的范围内,则简化为:

(double) progressValue / (double) (Max)

如果您与进度报告一致,那么对于进度报告,您的0 <= x <= 1的约定是合理的。就个人而言,我通常更喜欢使用0&lt; = x&lt; = 100,因为这是BackgroundWorker.ReportProgress方法所使用的。

对于使用整数值的进度报告通常足够精确 - 用户可能并不关心12.5%完成和13%完成之间的差异。

至于你的另一个例子,我通常也会使用0到1的范围来表示0%到100% - 然后使用“P”格式说明符将其格式化为百分比。

答案 2 :(得分:0)

我从来没有找到一个好的答案,但已经决定使用0<=x<=Integer.MaxValue范围内的整数。

这并不理想,因为它不是特别易读的,但它会隐式强制执行有效范围,并为大多数情况提供足够的分辨率。

答案 3 :(得分:0)

这里有几个不同的用例:

  1. 进度:0(开始)到1(完成)。使用浮点数或双精度数。这可用于缩放进度条或可以百分比(或两者)显示。
  2. 比较:使用布尔值(true =相同,false =不相同)
  3. 对于插件情况,我会创建一个像IProgressValue之类的界面。包括用于设置不同输入类型的值的方法。