bc : 소수점 이하 자릿수 설정


52

bc 숫자를 정수로 처리합니다.

# echo "100/3" | bc
33

bc -l 부동 소수점 객체로 숫자를 처리합니다.

# echo "100/3" | bc -l
33.33333333333333333333

소수점 뒤의 자릿수를 제한하는 방법이 있습니까?


10
흥미롭게도 이것은 부서와 만 작동합니다. 당신이 원하는 경우 scale=0;1234*1.1, 당신은으로 작성해야 scale=0;1234*1.1/1얻을 1357. 그렇지 않으면의 값에 관계없이을 scale얻습니다 1357.4.
Wok

@Wok의 의견이 질문이 아닌 수락 된 답변에 포함되어서는 안됩니까? 대답을 읽을 때까지이 의견이 무엇을 의미하는지 전혀 몰랐습니다.
Wilson F

1
@WilsonF 답변에 대한 참조를 추가했습니다.
Adam Matan

2
@Wok, 나누기 또는 곱셈에 의존하지 않습니다. 입력에 따라 다릅니다. 가장 큰 정밀도 숫자는 출력의 정밀도를 결정합니다. 어떻게 1234*1.0당신에게 줄 것이다1234.0
Richlv

답변:


70

scale특수 변수를 설정하십시오 .

$ echo "scale=2; 100/3" | bc
33.33

3
질문에 대한 @Wok의 의견을 참조하십시오.
Adam Matan

$ echo "scale=2; (100/180)*180" | bc제공 99.00 :(
Donatas Olsevičius

@ DonatasOlsevičius (180분의 100)는 그래서 : 당신이 바로 값을주고 0.55 다음 (* 180 0.55) = 99을 = 때문입니다
Kamaldeep 싱 바 티아

위의 경우 반올림하면 좋을 것 .5입니다. ~$ echo "scale=2; 12/104" | bc .11 반올림하면이됩니다 .12. 그러나 여전히 내 작업을 수행해야합니다.
jbrock

3
이 방법으로 값을 인쇄 할 때까지 정밀도를 유지할 수 있습니다 echo "result = (100/180) * 180; scale=2; result / 1" | bc -l. 이제 당신은 얻는다 99.99.
바이런 호킨스

10

scale분할에만 작동합니다. 일부 괴짜가 곱셈에 필요하면 문자열 조작을 사용하여이를 수행 할 수 있습니다. 곱해야한다면 32 * 0.60대답은 19.20입니다. 대답으로 19을 혼자 가져야하는 경우 다른 방법으로 얻을 수 있습니다.

  1. 문자열 조작 사용

    $ S=$(echo "32*.60" | bc ) ; echo ${S%.*}
    19
    

    문자열 조작 구문 : ${Variable%pattern},이 뒤에 오는 짧은 일치 패턴이 삭제됩니다 %. 문자열 조작에 대한 자세한 내용 은 Advanced Bash-Scripting Guide를 참조하십시오 .

  2. Scale명시된대로 사용**chronitis**

    $ echo "scale=0; 32*60/100" | bc
    19
    
  3. 문자열 조작 대신 후행 0을 제거하기 위해 1로 나눌 수도 있습니다.

    $ echo "0.232 * 1000" | bc
    232.000
    
    $ echo "0.232 * 1000 / 1" | bc
    232
    

질문에 대한 내 의견에서 언급했듯이 곱셈이 아니라 소수점 이하 자릿수를 가진 입력 숫자에 의한 것입니다. 또는 다르게 표현하기 위해 "가장 긴"소수점 이하 자릿수가있는 숫자는 출력에 소수점 이하 자릿수를 결정합니다.
Richlv

4

이전 답변 외에도

echo "scale=2; 1.0150876" | bc

보고

1.0150876

수학 연산을 추가하여 소수 2 개만 얻습니다-(NUMBER * 100) / 100

echo "scale=2; (1.0150876 * 100) / 100" | bc

이제 반환

1.01

3

printf 명령을 사용하여 결과를 소수점 이하 3 자리로 반올림 할 수도 있습니다.

# printf "%.3f\n" $(echo "100/3" | bc -l)
3.333

2

완전하게하다

scale = 2는 답을 소수점 이하 두 자리로 자르지 만 다음과 같이 반올림 할 수 있습니다.

$ echo "a=12/104; scale=2; (a+0.005)/1" | bc -l
.12
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.