Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 부동소수점 숫자를 나눠 소수점 둘째 자리까지 반올림하고 나머지 계산하기

문제 소개

다음과 같은 부동소수점 숫자가 있다고 가정해 보겠습니다.

2.74

이 숫자를 4로 나누면 결과는 0.685입니다.

그런데 실제 상황에서는 이 숫자를 4로 나누되, 각 몫을 소수점 둘째 자리까지만 표현해야 하는 경우가 많습니다. 예를 들어 금액을 여러 사람에게 분배할 때처럼 말입니다.

즉, 원하는 결과는 다음과 같습니다.

0.69씩 3번, 그리고 나머지 0.67

검증해 보면 0.69 × 3 + 0.67 = 2.07 + 0.67 = 2.74로, 반올림 과정에서도 원래 값이 정확히 유지됩니다.

해결 방법

이 문제는 다음 단계로 해결할 수 있습니다.

  1. 전체 숫자를 원하는 등분 개수(parts)로 나눈 뒤, 지정한 자릿수(precision)로 반올림하여 몫(quo)을 구합니다.
  2. 몫에 (parts - 1)을 곱한 값을 전체 숫자에서 빼서 나머지(remainder)를 계산합니다. 마지막 한 조각이 반올림 오차를 흡수하는 역할을 합니다.
  3. 몫과 나머지가 같다면 모든 조각이 동일한 것이므로 parts와 value만 반환하고, 그렇지 않다면 parts - 1개의 동일한 값과 나머지를 함께 반환합니다.

코드 예제

이를 구현한 코드는 다음과 같습니다.

const num = 2.74;
const parts = 4;
const divideWithPrecision = (num, parts, precision = 2) => {
    const quo = +(num / parts).toFixed(precision);
    const remainder = +(num - quo * (parts - 1)).toFixed(precision);
    if(quo === remainder){
        return {
            parts,
            value: quo
        };
    }else{
        return {
            parts: parts - 1,
            value: quo,
            remainder
        };
    };
};
console.log(divideWithPrecision(num, parts));

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

{ parts: 3, value: 0.69, remainder: 0.67 }

결과를 해석해 보면, 2.74를 4등분하려 할 때 0.69씩 3조각으로 나누고 남은 0.67이 나머지가 됩니다. 이 방식을 사용하면 반올림으로 인한 값의 손실 없이 원래 숫자를 그대로 보존할 수 있어, 금액 분배나 수량 계산 등 정확성이 중요한 작업에 유용하게 활용할 수 있습니다.