【问题标题】:How to round to nearest 0, 5 or 9 integer如何四舍五入到最接近的 0、5 或 9 整数
【发布时间】:2018-03-16 22:43:28
【问题描述】:

如何将给定数字四舍五入为 0、5 或 9,哪个最接近? 我试过了:

=MROUND(I2,5)-((MOD(MROUND(I2,5),10))=0)

但我也需要零,这只会给我五分和九分。 谢谢

【问题讨论】:

    标签: excel google-sheets formulas


    【解决方案1】:
    =1*(ROUNDDOWN(A2/10,0)&INDEX({0,5,9},MATCH(MIN(ABS({0,5,9}-MOD(A2,10))),ABS({0,5,9}-MOD(A2,10)),0)))
    
    • MOD 获取单元格的正确数字
    • 找出 {0,5,9} 和正确数字之间的距离并将其匹配到最接近的数字
    • 将匹配数字的右侧连接到左侧数字并乘以 1

    将 0 添加到 ROUNDDOWN 以满足 ,生成以下内容:

    【讨论】:

    • 您可能需要将 {0,5,9} 更改为 {0,5,9,10} 以便(例如)9.6 轮到 10。
    • 公平点 - 反正 OP 很满意,所以我应该远离它!
    • 我觉得 7.00 应该舍入到 9 而不是 5? OP 澄清了吗?
    【解决方案2】:

    根据我对您晦涩的要求的了解,您需要取最后一个整数和任何小数(因此对于123.456,我们将查看3.456)并将其与此图表进行比较:

    解读:

      If it is: Then it becomes:      
    >= 0 And <2.5 0         
    >= 2.5 And < 7 5         
    >= 7 And < 9.5 9         
    >= 9.5 and < 10 10 (zero rounded up)

    代码:

    Function round059(num As Double)
        Dim L As Single, R As Single
        L = Int(num / 10) * 10
        R = num - L
        If R >= 2.5 And R < 7 Then
            R = 5
        Else
            If R >= 7 And R < 9.5 Then
                R = 9
            Else
                If R >= 9.5 Then
                    R = 10
                Else
                    R = 0
                End If
            End If
        End If
        round059 = L + R
    End Function
    

    测试:

    Sub test()
        Dim x As Double
        For x = -0.1 To 10.1 Step 0.2
            Debug.Print "    " & x & ":", , round059(x)
        Next x
    End Sub
    

    结果:

    -0.1:                   0    
    0.1:                    0    
    0.3:                    0    
    0.5:                    0    
    0.7:                    0    
    0.9:                    0    
    1.1:                    0    
    1.3:                    0    
    1.5:                    0    
    1.7:                    0    
    1.9:                    0    
    2.1:                    0    
    2.3:                    0    
    2.5:                    5    
    2.7:                    5    
    2.9:                    5    
    3.1:                    5    
    3.3:                    5    
    3.5:                    5    
    3.7:                    5    
    3.9:                    5    
    4.1:                    5    
    4.3:                    5    
    4.5:                    5    
    4.7:                    5    
    4.9:                    5    
    5.1:                    5    
    5.3:                    5    
    5.5:                    5    
    5.7:                    5    
    5.9:                    5    
    6.1:                    5    
    6.3:                    5    
    6.5:                    5    
    6.7:                    5    
    6.9:                    5    
    7.1:                    9    
    7.3:                    9    
    7.5:                    9    
    7.7:                    9    
    7.9:                    9    
    8.10000000000001:       9    
    8.3:                    9    
    8.5:                    9    
    8.7:                    9    
    8.9:                    9    
    9.1:                    9    
    9.3:                    9    
    9.5:                    10    
    9.7:                    10    
    9.9:                    10    
    10.1:                   10    
    

    是吗?

    【讨论】:

    • 对我来说这更好,因为它给出了我期望的 9.5 到 10 之间的结果
    • 不,我不是原始发帖人,但我想投票和评论。
    • 知道了——我什至没有看你的名字 :-)
    • 我很惊讶没有人评论示例结果中的8.10000000000001...我把它留在那里有点希望有人提到一个修复,因为(虽然不是在这种情况下很重要)我以前处理过它,但不记得是什么原因导致它或如何防止它。与以不同方式处理数据类型有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多