VBA에서 무한대와 그 이상으로.
이 게시물은 .NET NaN의 & Inifinite 값이 Excel 2010 VBA로 다시 전달되는 것에 관한 것입니다.
.NET NaN 또는 Neg, Pos Infinity를 반환할 수 있는 C# 메서드를 사용합니다.VBA의 결과는 이상하고(즉, 평소보다 이상함), 안전하게 상황에 대처하기 위해 생각해낸 유일한 방법은 "-1.#"이라는 점입니다.IND" 또는 "-1.#"INF" 또는 "1".#INF".
더 좋은 방법이 있습니까?
궁금하시면 이상한 부분을 여기에 기록해 두었습니다.(예는 NaN에 대한 것이지만, pos 또는 neg infinity에 대한 이야기는 동일합니다.)
double dVal = CSharpMethodReturningDouble() ' via .NET assembly / COM interop
variant vVal = CSharpMethodReturningDouble() ' via .NET assembly / COM interop
C# 메소드가 더블을 반환하는 경우.NaN, 그러면 (임마인드 윈도우에서):
?dVal
-1.#IND
?vVal
-1.#IND
NaN 테스트가 양수인 (박스형) 변형(유형 = 이중)
?IsNumeric(vVal)
True
?TypeName(vVal)
Double
(박스형) 변형 NaN에 대한 비교는 작동하지만 예상과 반대의 결과를 가져옵니다.(박스에서 해제된) 더블을 비교하면 오버플로 예외가 발생합니다.
?vVal=1 '<== NaN comparisons should always return false
True
?vVal=0 '<== that's not what you get with -1.#IND
True
?dVal=0 '<== strangely, the same comparison on the unboxed double fails
(OverFlow Exc)
(박스형) 변형 모델에 대한 작업은 오버플로 예외를 발생시킵니다. (박스형) 변형 모델에 대한 작업은 작업을 두 배로 증가시킵니다(그리고 반환 -1.#).IND, 예상대로)
?vVal * 1.1 '<== even stranger, for arith ops its the boxed value that fails
(Overflow Exc)
?dVal * 1.1 '<== but the operation on the unboxed double goes through
-1.#IND
IsError, IsNumeric은 도움이 되지 않습니다:
?IsError(vVal)
False
?IsError(dVal)
False
?IsNumeric(vVal)
True
?IsNumeric(dVal)
True
항상 문자열 비교를 사용하여 다음을 테스트할 수 있습니다.
?vVal = "-1.#IND"
True
?dVal = "-1.#IND"
True
더블 이후로.NAN 필드는 숫자가 아닌 값을 나타냅니다. 문자열 비교를 사용하여 올바른 트랙에 있을 가능성이 높습니다.
반대 방향으로 가고 있는 경우(즉, VB 밖으로 값을 전달하는 경우) ByRef 및 ByVal이 일반적인 용의자입니다.
VB의 IsNumeric() 기능이 항상 직관적인 것은 아닙니다.예를 들어, 영숫자 코드가 우연히 과학적 표기법의 숫자가 될 경우 True를 반환합니다.
당신의 현재 해결 방법이 허용된다는 David의 의견에 동의합니다.외국어 설치에서 테스트를 수행해야 합니다!
다음 예제에서는 솔루션의 일부가 될 수 있습니다. 1과 0이 동시에 동일한 값은 정규 숫자가 아닙니다.이 검정은 NaNs와 정규 숫자를 구별할 수 있습니다.이와 유사한 규칙을 찾아 +/- 무한대를 찾을 수 있습니다.
현재 로케일을 고려해야 합니다.NaN이 될 수 있습니다."-1.#IND"
또는"-1,#IND"
십진수 구분 기호 설정에 따라 달라집니다.
이를 방지하는 한 가지 방법은 InStr 비교입니다.
InStr(CStr(dVal), "#IND") <> 0
언급URL : https://stackoverflow.com/questions/9204323/to-infinity-and-beyond-in-vba
'programing' 카테고리의 다른 글
VB.NET에서 정적 메서드 구현 (0) | 2023.06.16 |
---|---|
Django 및 mysql 커넥터 python의 특성 오류 (0) | 2023.06.16 |
Git: "추적되지 않은" 파일만 나열(또한 사용자 지정 명령) (0) | 2023.06.11 |
'의 의미합니까?IISReset' do? (0) | 2023.06.11 |
Oracle의 DATEADD()에 대한 동등한 기능 (0) | 2023.06.11 |