2012-04-23 2 views
4

: 전체 표현식이 때SQL 서버 라운드 I이 같은 <code>Round</code> 함수를 사용하는 경우 나</p> <pre><code>select @some_val_in_percents = (@total_val/100) * @some_val </code></pre> <p>같은 표현식을 저장 프로 시저에서

select @some_val_in_percents = Round((@total_val/100) * @some_val, 0) 

이 결과는 반올림 될 계산되었거나 (@total_val/100)은 반올림되고 @some_val을 곱한 것입니까?

+3

왜 그냥 사용해 보지 않으시겠습니까? –

+0

어쩌면 누군가가 나보다 더 나은 방법을 말해 줄 것이다.))))))) – superM

답변

8

% 값이 잘못 계산 된 것 같습니다. 여기에 내가 같은 것으로 기대 내용은 다음과 같습니다

@some_val * 100/@total_val 

ROUND() 기능으로, 그렇지 않은 결과의 일부에, 표현의 최종 결과에 따라 행동 할 것이다. 따라서 먼저 표현식이 완전히 평가 된 다음 ROUND()이 결과에 적용됩니다.

참고도 (경우에 당신이 이미 알고하지 않은 경우) 나누기 연산자의 피연산자가 모두 정수 경우, SQL 서버 가에을 내림 것 분할의 결과 즉, 정수 나눗셈을 수행 할 것 심지어 가장 가까운 정수 전에ROUND()이 적용됩니다. 이를 피하려면 적어도 하나의 피연산자가 정수가 아닌지 확인하십시오. 이 같은 Transact-SQL ROUND() 필요하다 또한

ROUND(@some_val * 100.0/@total_val, 2) 

참고 번째 인수 (정밀).

+0

@superM :'ROUND (166/100 * 2, 0)'* 나를 위해 2를 돌려 줬다 (2008 R2). –

+0

죄송합니다, 당신 말이 맞아요. 나는 그 결과를 뒤섞었다)))) – superM

1

Round은 내용을 평가 한 후에 계산됩니다.

따라서 (@total_val/100) * @some_val은 반올림됩니다.