2016-07-21 6 views
1

워크 시트의 셀과 관련된 double 값을 사용하여 매우 정확한 계산을 수행하려고합니다. 코드를 디버깅 할 때이 테스트를 두 번 만로 -3298.86를 따기 것이 분명하다 그러나 ... £ 3,298.8599993 - J2는 소수점 값 셀에서Excel VBA double with double

Sub MacroTest() 

Dim opt As Worksheet 
Set opt = Sheets("Optimisation") 

Dim test As Double 

test = CDec(opt.Cells(2, 10)) 

End Sub 

: 나는 테스트 할 나는 다음과 같은 코드를 작성 값. 나는 왜 이것이 복식이 이것보다 더 정확하다고 생각했는지 이해할 수 없다. 필자가 읽은 대부분의 게시물은 CDec를 사용하면이 문제를 해결해야한다고 생각하는 것 같습니다. 그러나 이것은 나와 같이 작동하지 않는 것으로 보입니다.

주 - J2의 값은 수식을 사용하여 계산되었지만 차이가 있는지는 확실하지 않습니다. 어떤 도움이라도 대단히 감사합니다 - 감사합니다.

+0

당신이 시점 이후 원하는 숫자의 수를 표시하는 형식은'셀 J2'입니다. ? –

+0

@ShaiRado 셀 J2는 현재 소수 자릿수 7 자리를 표시하도록 형식이 지정되어 있습니다. –

답변

3

이 경우 opt.Cells(2, 10).Value2을 사용해야합니다. Range.Value2 property :

이 속성과 Value 속성 사이의 유일한 차이는 값 2 속성은 통화 및 날짜 데이터 형식을 사용하지 않는 입니다. Double 데이터 형식을 사용하여 이러한 데이터 형식으로 포맷 된 값을 부동 소수점 숫자로 반환 할 수 있습니다. .Value2는 그럼에도 불구하고 Double를 반환하는 동안 셀 통화로 포맷 된 경우

그래서 기본 .ValueCurrency를 반환합니다.

0

나는 아직 언급하지만, 여기에 코드에 이상이 무엇을 할 수 없습니다 이중에 넣고 당신은 이중 데이터 형식에 CDEC 변환 공식을 사용하는

,이 함수의 결과 -datatype을 다시 입력하십시오. 그래서 당신은 여기서 정확한 것을 얻지 못합니다.

은 VBA에서 decimal-datatype을 사용할 수 있습니까? 그렇다면 이중 데이터 형식을 사용 하시겠습니까?

예를 들어, 셀 "A1"에는 십진수 3298.859999가 들어 있습니다. 소수-데이터 유형 변수의

Dim varDec As Variant 
varDec = CDec(Range("A1").Value2) 

Debug.Print "Value in A1 : " & Format(varDec, "0.0000000000000000000000") 

직접 캐스팅 VBA에서는 불가능하지만 변형-데이터 유형은 하위 유형으로 진수 - 데이터 유형을 가지고있다.

직접 확인하려면 디버깅하는 동안 VBE의 "로컬"창을 확인하십시오. 이 표시됩니다 :

Expression : var 
Value  : 3298.859999 
Type  : Variant/Decimal 

Background article on Excel numeric precision