【问题标题】:How to create c# function to convert from groups of ranges of numbers to continues numbers如何创建 c# 函数以将数字范围组转换为连续数字
【发布时间】:2009-05-23 02:14:03
【问题描述】:

我们有 6 组,每组 253 台机器,
但每组的范围从 2 号机器到 254 号机器,
并且连续的 ID 代表每台机器。

如下表所示:


组机器 ID
0 2-254 1-253

1 2-254 254-506

2 2-254 507-759

3 2-254 760-1012

4 2-254 1013-1265

5 2-254 1266-1518


我正在寻找一种 c# 简单的方法来编写从 ID 转换为组机的函数

示例:ID 508 是组 #2 ,机器 #3
(机器 507 是
组 2 中的第一台机器,因为它以 2 开头,所以第二台机器是机器#3)

反之亦然
示例:如果我得到参数:group #2 machine#5 ,
该函数必须返回 ID 510
我该怎么做?
我有一个公式,但它没有用
有什么想法吗?
谢谢

【问题讨论】:

  • 我觉得你的问题令人困惑。 “机器 ID”的概念非常模糊,因为您似乎对两个不同的事物使用相同的名称...... serialNumber 与 groupAndMachineId。请编辑问题以消除这两个概念的歧义。

标签: c# .net c#-3.0


【解决方案1】:

先将id减一,得到从零开始,然后可以分为组和机,加二调整机号到2-254范围:

id--;
int group = id / 253;
int machine = (id % 253) + 2;

作为两个独立的函数:

int GetGroup(int id) {
   return (id - 1) / 253;
}

int GetMachine(int id) {
   return ((id - 1) % 253) + 2;
}

要从组和机器中获取 id,请执行相反的操作;从机器号中减去二使其从零开始,合并它们,然后加一:

int GetId(int group, int machine) {
   return group * 253 + (machine - 2) + 1;
}

【讨论】:

    【解决方案2】:

    这个呢?

    function getid ( int g, int m ) {
        return g * (254 - 1 ) + m - 1; 
    }
    

    我认为这是对的?简化为:

    function getid ( int g, int m ) {
        return g * 253 + m - 1; 
    }
    

    IE

    2 * 253 + 3 = 508
    2 * 253 + 5 = 510
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-15
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多