선행 0은 표시하고 후행 0은 표시하지 않도록 10진수 형식을 어떻게 지정합니까?

선행 0은 표시하고 후행 0은 표시하지 않도록 10진수 형식을 어떻게 지정합니까?

Ubuntu 14.04.1 LTS 64비트 bash 명령 프롬프트에 다음 스크립트가 있습니다.

S=0.030
F=0.150
N=10
reso=20
DIFF=`echo "scale=3; $F - $S" | bc -l`
df=`echo "scale=3; $DIFF / $N" | bc -l`
is=`echo "scale=3; $S / $df" | bc -l`
if=`echo "scale=3; $F / $df" | bc -l`
cd wgdisp-out
for i in `seq 0 $N` 
    do
        f=`echo "scale=3; $S + $i * $df" | bc -l | awk ' sub("\\.*0+$","") '`
        #h5totxt hsli0$f.h5 | harminv -vt 0.1 -w 2-3 -a 0.9 -f 200 | sed -n '/^[[:digit:]]/p' | cut -d , -f 1
        echo $f
    done

f를 로 표시하고 싶습니다 0.03, 0.042, 0.054, .... 0.138, 0.15. 예를 들어 f가 파일 이름에 사용되기 때문에 이것이 중요합니다 hsli0.03.h5. 누구든지 올바른 방향을 알려줄 수 있습니까? 나는 쉘의 산술에 익숙하지 않습니다.

편집하다: 다음 구성을 시도했지만 원하는 출력을 생성하지 못했고 크기 조정 옵션도 bc작동하지 않는 것 같습니다.

f=`echo "scale=3; $S + $i * $df" | bc | sed -e 's/^\./0./' -e 's/$^\/0/./'`

편집 2: 작동하게 하려면 다음 단일 명령을 사용하십시오.

f=`echo "scale=3; $S + $i * $df" | bc | sed -e 's/^\./0./;s/[0]*$//g'`

답변1

는 제한하는 데 사용되는 특수 변수 bc입니다 .scale규모(쉼표 뒤의 자릿수) /(나누기)와 같은 일부 연산자의 결과입니다. 표시된 숫자의 정밀도가 아니라 bc계산에 사용됩니다.

예를 들어 에서 scale=1; 1/3결과는 0.3( 3/10)로 와는 거리가 멀다 1/3.

계산에는 큰 규모의 값을 사용해야 하며 표시될 때만 줄여야 합니다(예: scale끝 부분에서 나누기).1

비교하다:

$ echo "scale=100; r=1/3*300; scale=3; r/1" | bc
99.999

그리고:

$ echo "scale=3; 1/3*300" | bc
99.900

나는 다음과 같이 쓸 것입니다 :

n=10
echo "
  s = 0.030
  f = 0.150
  n = $n
  r = 20
  scale = 100
  d = (f - s) / n
  scale = 3
  for (i = s; i <= f; i += d) i/1" |
    bc |
    sed 's/^\./0./;s/0*$//' |
    while read f; do
      h5totxt "hsli$f.h5" | harminv -vt 0.1 -w 2-3 -a 0.9 -f 200
    done

답변2

Bash의 부동 소수점 지원은 매우 열악합니다. 그러나 다음을 계속 사용할 수 있습니다 printf.

printf '%5.3f\n' $f
printf '%.3g\n' $f

앞에 0을 추가하려면 매개변수 확장을 사용할 수 있습니다.

f=${f/#./0.}
# if negative numbers are possible, too
f=${f/#-./-0.}

관련 정보