0.58 圆整为 0.5
1.56 圆整为 1
....
6.38 圆整为 6
....
9.98 圆整为 10
....
15.96 圆整为 1664.14 圆整为 63
....
101.1 圆整为 100
通过数据分析,采用 x_Delat < 1,在对几个数据进行圆整有其局限性.如: 64.14 圆整为 63,好像模型不好建立.
而在实际操作中,其圆整规则下楼下数据.

解决方案 »

  1.   

    0.5   -----    0.58
    0.8   -----    0.8
    1   -----    1.06
    1.5   -----    1.56
    2   -----    2.02
    2.5   -----    2.5
    3   -----    3
    4   -----    4.1
    5   -----    5
    5   -----    5.1
    6   -----    6
    6   -----    6.38
    8   -----    8.2
    8   -----    8.38
    10   -----    9.98
    10   -----    10.36
    12   -----    12.48
    12   -----    12.36
    16   -----    15.96
    16   -----    16.06
    20   -----    20.46
    20   -----    20.6
    25   -----    25.1
    25   -----    25.68
    32   -----    32
    32   -----    31.98
    40   -----    40.18
    40   -----    40.02
    50   -----    49.62
    50   -----    50.54
    63   -----    64.14
    63   -----    64.14
    80   -----    79.74
    80   -----    81.62
    100   -----    100.94
    100   -----    101.72数据附件见http://club.excelhome.net/viewthread.php?tid=595348&extra=page%3D1&frombbs=1
      

  2.   

    Sub test()
        X = getC(71)
        MsgBox X
    End Sub
    Function getC(b)
        aa = Array(0.5, 0.8, 1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100)
        If b < 0.5 Then getC = 0.5
        If b > 100 Then getC = 100
        If getC = 0 Then
            For i = 0 To 21
                If b >= aa(i) And b <= aa(i + 1) Then
                    If aa(i + 1) + aa(i) < b + b Then
                       getC = aa(i + 1)
                    Else
                       getC = aa(i)
                    End If
                    Exit For
                End If
            Next
        End IfEnd Function
      

  3.   


    谢谢,目标实现.
    看起来比较简单,也试着按这种方法编了个程序,没有成功
    好像是这条语句
    aa(i + 1) + aa(i) < b + b需要消化理解其算法.
      

  4.   

    aa(i + 1) + aa(i) < b + b=aa(i + 1) - b <  b - aa(i)
      

  5.   


    这是一种约定俗成的圆整规则,建立数据模型有点说不清.aa = Array(0.5, 0.8, 1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100)三楼大侠结果,目标结果实现.aa(i + 1) + aa(i) < b + b
    =
    aa(i + 1) - b < b - aa(i)
    有了这个解释,加快消化理解的速度,谢谢ldy888的回帖.
      

  6.   

    Select Case 版本:Public Function Grounding(ByVal x As Single) As Single
    Select Case x
        Case Is < 0.65
            Grounding = 0.5
        Case Is < 0.9
            Grounding = 0.8
        Case Is < 1.25
            Grounding = 1
        Case Is < 1.75
            Grounding = 1.5
        Case Is < 2.25
            Grounding = 2
        Case Is < 2.75
            Grounding = 2.5
        Case Is < 3.5
            Grounding = 3
        Case Is < 4.5
            Grounding = 4
        Case Is < 5.5
            Grounding = 5
        Case Is < 7
            Grounding = 6
        Case Is < 9
            Grounding = 8
        Case Is < 11
            Grounding = 10
        Case Is < 14
            Grounding = 12
        Case Is < 18
            Grounding = 16
        Case Is < 22.5
            Grounding = 20
        Case Is < 28.5
            Grounding = 25
        Case Is < 36
            Grounding = 32
        Case Is < 45
            Grounding = 40
        Case Is < 56.5
            Grounding = 50
        Case Is < 71.5
            Grounding = 63
        Case Is < 90
            Grounding = 80
        Case Else
            Grounding = 100
    End SelectEnd Function
      

  7.   

    我觉得以下的式子对你来说更容易理解:
                    If Abs(aa(i) - b) < Abs(aa(i + 1) - b) Then
                       getC = aa(i)
                    Else
                       getC = aa(i + 1)
                    End If
    取差值小的归档