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 자리로 반올림하려면 "넛지 계수"를 10으로 나누는 식으로 진행됩니다.

이러한 내장 기능의 부족으로 인해 사람들은 종종 쉘 대신 Perl과 같은 것을 사용하게 됩니다.

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

똑같지만 모두 단일 프로세스로 처리됩니다.

답변2

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

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

소수점 이하 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

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

관련 정보