VBA:测试完美的立方体

hey*_*ack 7 excel vba excel-vba user-defined-functions

我正在尝试在VBA中编写一个简单的函数来测试实际值并输出字符串结果,如果它是一个完美的立方体.这是我的代码:

Function PerfectCubeTest(x as Double)

    If (x) ^ (1 / 3) = Int(x) Then
        PerfectCubeTest = "Perfect"
    Else
        PerfectCubeTest = "Flawed"
    End If

End Function
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用简单的if语句来测试值的立方根是否等于其整数部分(即没有余数).我尝试使用一些完美的立方体(1,8,27,64,125)测试该功能,但它仅适用于数字1.任何其他值都会吐出"有缺陷"的情况.知道这里有什么问题吗?

Sco*_*ner 6

您正在测试多维数据集是否等于提供的double.

因此,对于8,您将测试2 = 8.

编辑:还发现了一个浮点问题.为了解决这个问题,我们将小数点后一点来尝试克服这个问题.

更改为以下内容:

Function PerfectCubeTest(x As Double)

    If Round((x) ^ (1 / 3), 10) = Round((x) ^ (1 / 3), 0) Then
        PerfectCubeTest = "Perfect"
    Else
        PerfectCubeTest = "Flawed"
    End If

End Function
Run Code Online (Sandbox Code Playgroud)

或者(感谢罗恩)

Function PerfectCubeTest(x As Double)

    If CDec(x ^ (1 / 3)) = Int(CDec(x ^ (1 / 3))) Then
        PerfectCubeTest = "Perfect"
    Else
        PerfectCubeTest = "Flawed"
    End If


End Function
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • @ScottCraner也是`CDec(x ^(1/3))= Int(CDec(x ^(1/3)))` (2认同)