printf를 사용하여 49.765를 49.77로 반올림하시겠습니까?

printf를 사용하여 49.765를 49.77로 반올림하시겠습니까?

49.765는 일련의 명령의 출력입니다. print f를 사용하여 소수점 이하 두 자리에서 49.77로 반올림하고 싶습니다.

코드는 무엇입니까?

답변1

$ x=49.765
$ printf "%.2f" $(echo "$x + 0.005" | bc)

printf(1)에는 반올림 기능이 내장되어 있지 않고 POSIX 셸에는 부동 소수점 연산이 내장되어 있지 않으므로 외부 명령을 사용해야 합니다 .

가장 가까운 소수점 이하 자릿수로 반올림하려면 0.5를 더하고 자릅니다. 가장 가까운 10분의 1 자리로 반올림하려면 Nudge Factor를 10으로 나누세요.

내장된 기능이 부족하여 사람들이 쉘 대신 Perl과 같은 것을 사용하게 되는 경우가 많습니다.

$ perl -e 'printf "%.2f", 49.765 + 0.005'

똑같지만 모두 하나의 프로세스로 처리됩니다.

답변2

반올림에는 다음 명령을 사용할 수 있습니다.

부동 소수점 숫자 = 49.765; printf("%0.2f", number);

소수점 이하 2자리까지 구할 수 있어야 합니다.

그러나 이는 인쇄만 되고 값은 업데이트되지 않습니다. 변수의 값을 변경하려면 아래 방법을 사용해야 합니다.

#include <math.h>

float val = 49.765;

float rounded_down = floorf(val * 100) / 100;   /* Result: 49.76 */
float nearest = roundf(val * 100) / 100;  /* Result: 49.77 */
float rounded_up = ceilf(val * 100) / 100;      /* Result: 49.77 */

반올림(예: 소수점 두 자리 이하 자르기), 가장 가까운 값으로 반올림, 반올림 등 세 가지 다른 반올림 규칙 중에서 선택해야 할 수도 있습니다. 일반적으로 가장 가까운 값으로 반올림하려고 합니다.

여러 다른 사람들이 지적했듯이 부동 소수점 표현의 단점으로 인해 이러한 반올림된 값은 정확하게 "명백한" 소수 값이 아닐 수 있지만 매우 유사합니다.

답변3

변수에서 "명령 루프"의 출력을 캡처하고 printf.

$ x=49.765

$ printf '%.2f\n' "$x"
49.76

반올림은 숫자의 이진 표현에서 "가장 가까운 짝수로 반올림" 규칙에 따라 수행됩니다. 대부분의 경우 이진 표현은 주어진 숫자와 정확히 동일하지 않다는 점을 이해하십시오.

관련 정보