求解器输出的精确十进制

时间:2018-03-29 12:43:39

标签: excel vba excel-vba

我正在尝试编码求解器以解决4个未知方程。其中2个未知参数必须是整数或精确1个十进制数(127.1; 127.2; 127.3 ......)。我确切地说我不想舍入值,解算器必须找到确切的值(不是127.1234 = 127.1)。

难度在于精确十进制数,我不知道如何设置此约束。我尝试过布尔函数:

Function EstValide(Rng As Range) As Boolean
If Round(Rng.Value * 10) = Rng.Value * 10 Then
EstValide = True
End If
End Function

但是解算器无法识别相关单元格的布尔值,关系式为:= 2

solveradd cellref:=Range("B24"), relation:=2, formulatext:=Range("B23") 'test
solveradd cellref:=Range("B25"), relation:=2, formulatext:=Range("B23") 'test

发现具有该功能的细胞B24 B25,并且在细胞B23中我刚刚放置了" TRUE"因为我希望我的约束在TRUE时起作用。

关于如何解决这个问题的任何想法?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

所以你需要避免使用True / False并用Integer值替换它? 这是实现它的简单方法:

Function EstValide(Rng As Range) As Long
    EstValide = Round(Rng.Value2, 0)
End Function

使用银行四舍五入 - 例如它舍入为偶数 - Why does .NET use banker's rounding as default?参见此示例:

Sub TestMe()

    Debug.Print Round(5.5, 0)       '6
    Debug.Print Round(6.5, 0)       '6
    Debug.Print Round(7.5, 0)       '8
    Debug.Print Round(8.5, 0)       '8

    With WorksheetFunction
        Debug.Print .Round(5.5, 0)  '6
        Debug.Print .Round(6.5, 0)  '7
        Debug.Print .Round(7.5, 0)  '8
        Debug.Print .Round(8.5, 0)  '9
    End With

End Sub

答案 1 :(得分:0)

感谢您的回答。

我的问题不是获取整数值。当您对求解器进行编码时,有一种非常简单的方法可以对求解器说出#34;我只想求整数作为求解器"通过使用约束 relation:= 4

我的问题是对解算器说#34;我想得到确切的第一个十进制数"例如:10.1 10.2 10.3等,但这些数字不得四舍五入。求解器必须找到适合精确的一位十进制数的精确值。例10.1而不是10.1234 = 10.1

它类似于整数的约束,但设计为1个十进制数。为此,我需要设置一个函数并在我的约束中实现它。