제한 내가 저장 프로 시저에 사용할 수 있도록하려면 엑셀의 계산 다음과 같은 설정이있다. 나는 또한 한 줄SQL 부동 소수점 정밀도는 6 자리
declare @e decimal(18,15) = (1-(1-(45/448.2)))*448.2
에서 계산을 실행 시도
declare @a decimal(18,15) = 45/448.2
declare @b decimal(18,15) = [email protected]
declare @c decimal(18,15) = [email protected]
declare @d decimal(18,15) = @c * 448.2
내가 값의 SQL을 반환 할 때 SQL에서
엑셀
CellA: 45/448.2 = 0.100401606425703
CellB: 1-CellA = 0.899598393574297
CellC: 1-CellB = 0.100401606425703
CellD: CellC * 448.2 = 45.000000000000000
는 내가이 다음을 수행하고 나에게 다음을 제공합니다 :
@a: 0.100401000000000
@b: 0.899599000000000
@c: 0.100401000000000
@d: 44.999728200000000
@e: 44.999728200000000
SQL에서 소수 자릿수의 정밀도를 조정하려했지만 아무런 차이가 없으며 소수점의 처음 6 자리 만 반환합니다. 공식을 실행할 때
합니까 엑셀은 최적화합니까?
아이디어가 있으십니까?
declare @a decimal(18,15) = 45/448.2
print @a
이 때문에 데이터 유형입니다
---------------------------------------
0.100401000000000
을 제공합니다
시도, 말, 'SELECT 45/CAST (448.2 AS DECIMAL (18,1))'. [여기 링크] (http://stackoverflow.com/a/5385417/73226)는 결과로 생성 된 데이터 유형에 대한 규칙을 알려줍니다. –
@MartinSmith는 내 대답이 45.000000000000085이더라도 이유를 설명 할 수 있겠지만 @a에 대해 더 완벽한 십진법을 제공합니까? – ScampDoodle
위의 대답을 너무 게으른 반복문에서 설명한 두 링크에 설명되어 있습니다. e1/e2는 p = p1 - s1 + s2 + max (6, s1 + p2 + 1), s = max (6, s1 + p2 + 1)'을 준다. 'p'가'> 38'이면's'가'6'에서 잘립니다. –