2009-05-25 3 views
0

엑셀의 ROUND 기능의 구현 : 당신이 당신의 처분에 이러한 기능이 있다면당신이 ROUND 함수를 구현하는 것이 어떻게

ROUND(value, number of digits) 
pi=3.14159265358979323 
so, for example, ROUND(pi, 3) = 3.142 

가 :
아닌가요를 - 정수
ANINT에 값을 자릅니다은 - 가장 가까운 계산 전체 숫자
NINT - 인수에 가장 가까운 정수를 반환합니다.

절대로 상기 기능을 사용하지 마십시오. 부동 원은 어떻게 이루어 집니까?

+0

이 질문에서 묻는다면 확실하지 않습니다. 1.) Excel의 반올림 기능이 어떻게 작동합니까? 2.) 프리미티브를 사용하여 반올림 함수를 구현하는 방법은 무엇입니까? 구체적으로 알고 싶었던 점을 명확히 설명하십시오. 또한 # 2를 의미하는 경우 많은 유형의 반올림이 있음을 알면 도움이 될 수 있습니다. http://www.diycalculator.com/sp-round.shtml 실제로 어떤 것을 지정하지 않았습니까? – Oorang

+0

나는 위의 내장 함수를 사용하여 반올림 함수 (기본 학교 수학에서부터 귀하의 목록에서 반올림 - 반올림이라고 생각합니다)를 구현하려고합니다. 사람들이 왜 새로운 것을 발명해야하는지 (예 : 10 가지 유형의 "반올림")을 이해하고 수백 년 동안 존재해온 이름으로 반올림해야하는지 이해하지 못했습니다. 수학자들은 오래 전에 그것을 정의했다. 그 결정을 바꾸려면 다른 이름을 지어주세요. 곧 스칼라 추가에 대한 새로운 정의를 내릴 것입니다. – Rook

+0

오, 예, 잊기 전에. 나는 왜 그들이 유효한 질문을 하향 투표하고 있는지를 말할 수있는 인물을 존경합니다. 정말 사람에 대해 알려줍니다. – Rook

답변

1
내가

function Round(value, num){ 
    numsToSave = POWER(10, num); 
    value *= numsToSave ; //Get the numbers we don't want rounded on the left side of the floating point 
    value = AINT(ANINT(value)); 
    value /= numsToSave; 

    return value; 
} 

또는

function Round(value, num){ 
    numsToSave = POWER(10, num); 
    value *= numsToSave ; //Get the numbers we don't want rounded on the left side of the floating point 
    value = NINT(value); 
    value /= numsToSave; 

    return value; 
} 
+0

나는 당신이 함수의 첫 줄에 곱셈 대신에 힘을 의미한다고 생각한다. –

+0

그래, 수학을 깨닫지 못 했어. 내 아침 커피를 줘. –

4

당신이 오버 플로우에 대해 걱정할 필요가없는 경우

가 여기 방법은 내 의사 코드, 가정 변명 할

:

ROUND(value, nod) = NINT(value * POWER(10, nod))/POWER(10, nod) 

을 그렇지 않으면 정수 부분과 float 부분을 별도로 처리해야합니다.

+0

-1 항상 오버 플로우 걱정할 필요가있어. – Oorang

+0

@Oorang : 일반적인 ROUND() 함수의 경우, 확실히. 특정 응용 프로그램의 경우 예를 들어 값과 고갈이 특정 임계 값 이하임을 미리 알 수 있습니다. 그러면 위의 수식이 오버플로되지 않습니다. –

관련 문제