我正在尝试编码求解器,以求解一个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时起作用。
关于我如何解决这个问题的任何想法?
提前谢谢。
因此,您需要避免使用True
/False
并用整数值替换它?这是实现它的简单方法:
Function EstValide(Rng As Range) As Long
EstValide = Round(Rng.Value2, 0)
End Function
VBA使用银行舍入 - 例如它偶数偶数 - 为什么.NET将银行家的舍入为默认值?请参阅此示例:
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
感谢您的回答。
我的问题不是要获得整数值。当您编码求解器时,有一种非常简单的方法可以通过使用约束关系来向求解器"我只想作为解决方案":= 4
我的问题是要对求解器说"我想获得确切的第一个小数号"示例:10.1 10.2 10.3等,但是这些数字不得舍入。求解器必须找到适合一个十进制数字的确切值。示例10.1而不是10.1234 = 10.1
它就像整数的约束,但设计了1个小数数字。为此,我需要设置一个函数并在约束中实现它。