(g)awk의 int()함수에 대해 궁금한 것이 있습니다.

박한산의 이미지

user% awk '{printf("%f",int(180*.7))}'

125.000000
125.000000
125.000000^Z
중단됨 (사용자)
user%

int(180*.7)로 저는 126이라는 출력값을 기대하는데 125가 출력됩니다.
처음에는 Unxutils에 있는 gawk.exe를 사용했는데, 이상해서 위의코드처럼
솔라리스에서 awk로 해도 마찬가지입니다.
서로 같은값을 내는것으로 봐선 제가 뭘 모르는것 같습니다만..

단호진의 이미지

awk문제가 아닌 것 같네요. C로 해봐도 같은 결과입니다.
double 로 계산한 결과를 보면 아시겠지만 작은 오차가
생깁니다. int연산이므로 잘라내는 연산을 하기 때문에
결과가 125가 나오네요.

#include <stdio.h>

int main()
{
    double a = 180.*0.7;
    printf("%d\n", (int)(180.*0.7));
    printf("%e\n", a - 126.);
    return 0;
}

cygwin환경에서 실행 결과입니다.

    $ ./int.exe
    125
    -1.421085e-14
[/]

:wq

박한산의 이미지

답글 감사합니다. 파이썬에서도 그렇게 나와 C로 해보려다가 미처 못해봤습니다만 역시 같은 결과네요 :)

>>> 180 * .7
125.99999999999999
>>> int(180*.7)
125
>>> print int(180*.7)
125
>>> 
doodoo의 이미지

scale=5
180 * 0.7
126.0
scale=3
180* .7
126.0

이렇게 되는데.. bc에서 정수를 취할수 있나요?
그렇게만 되면 126 나올거 같은데 ^^
명령은 bc -l 로 했습니다.