2014-01-14 2 views
5

VB.NET 2010을 사용하고 있습니다. 처음에는 DB2 테이블에서 값을 가져온 이후 데이터베이스 문제라고 생각한 문제가 발생했습니다. 그러나 .NET 자체에있는 것으로 보입니다. 나는 다음 두 줄의 코드를 실행하여이 결정 : 다음 sAmount 볼VB.net을 사용하여 CType을 사용하면 추가 숫자가 반환됩니다.

Dim sAmount As Single 
    sAmount = CType("212639.04", Single) 

는, 값이 212639.047입니다.

내 질문 : 7의 출처는 어디입니까?

답변

2

부동 소수점 데이터 유형 인 Single을 사용하여 이진 분수가 아닌 분수에서는 제대로 작동하지 않습니다.

부동 소수점 숫자 (하나의 데이터 유형 (시각 기본) 및 더블 데이터 형식 (Visual Basic의 경우))가 바이너리 분수로 저장 것을 기억 작업

Floating-Point Expressions Do Not Compare as Equal

. 이는 이진 분수가 아닌 양 (정확히 k와 n이 정수인 형태 k/(2^n))의 양을 정확하게 나타낼 수 없음을 의미합니다. 예를 들어 0.2 (= 1/5) 및 0.3 (= 3/10)은 근사치 일 수 있지만 0.5 (= 1/2) 및 0.3125 (= 5/16)는 정확한 값으로 유지 될 수 있습니다.

이 부정확성으로 인해 이 부동 소수점 값에서 작동 할 때 정확한 결과에 의존 할 수 없습니다. 특히, 이론적으로 동일한 인 두 값은 약간 다른 표현을 가질 수 있습니다.

부동 소수점 수량
Calculate the absolute value of their difference by using the Abs method of the 
Math class in the System namespace. 

Determine an acceptable maximum difference, such that you can consider the two 
quantities to be equal for practical purposes if their difference is no larger. 

Compare the absolute value of the difference to the acceptable difference. 

정밀도가 더 높은 숫자를 반환 또는 더블

을 비교합니다.

+0

감사합니다. 다른 사람의 코드를 상속 받았습니다. 고맙게도 그것은 단지 표시 문제 일 뿐이며 저장된 실제 값은 아닙니다. –

+0

내 편집 내용을 볼 수없는 경우. 이중을 사용하면 즉각적인 문제를 해결할 수 있습니다. – tinstaafl

관련 문제