Ubuntu bash에서는 소수점 이하 자릿수를 0 14.04.1 LTS 64-bit
으로 설정하고 소수점 왼쪽의 0을 제거할 수 없습니다. 으로 bc
어떻게 전환할 수 있나요 ? 이것은 내 파일 명명 규칙 때문에 필요합니다. 제안해 주셔서 감사합니다.0.005000000
.005
업데이트: 이미 정의된 쉘 변수와 함께 이것을 사용하고 다시 정의할 수 있습니까? 아래 코드에서는 오류가 발생합니다.
~/Desktop/MEEP$ printf "%.3f\n" $w
bash: printf: 0.005000: invalid number
0,000
로케일 출력
@vesnog:~$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=tr_TR.UTF-8
LC_TIME=tr_TR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=tr_TR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=tr_TR.UTF-8
LC_NAME=tr_TR.UTF-8
LC_ADDRESS=tr_TR.UTF-8
LC_TELEPHONE=tr_TR.UTF-8
LC_MEASUREMENT=tr_TR.UTF-8
LC_IDENTIFICATION=tr_TR.UTF-8
LC_ALL=
산출echo $w
@vesnog:~$ echo $w
0.005000
답변1
간단한 방법은 다음을 사용하는 것입니다 printf
.
$ printf "%.3f\n" 0.005000000000
0.005
선행을 제거하려면 0
다음과 같이 구문 분석하십시오 sed
.
$ printf "%.3f\n" 0.005000000000 | sed 's/^0//'
.005
답변2
라는 특수 변수가 있습니다 scale
. 이 변수를 설정하여 정밀도를 제한할 수 있습니다.
예
$ echo "300/7" | bc -l
42.85714285714285714285
정확도를 제한하려면,
$ echo "scale=2; 300/7" | bc -l
42.85
고쳐 쓰다
$ echo "scale=3; 300/7" | bc -l | sed 's/[0-9]*\././g'
.857
답변3
이 sed 명령은 후행 0을 제거합니다.
sed 's/\(0\.0*[1-9][1-9]*\)0*/\1/'
로 시작 하고 그 뒤에 0.
0개 이상의 0
', 1~9 사이의 1개 이상의 숫자, 0개 이상의 '가 오는 0
모든 값을 기억합니다. 그런 다음 0개 이상의 후행 항목을 자릅니다 0
.
이를 통해 후행 0을 원하는 만큼 구문 분석하고 0보다 큰 임의의 낮은 숫자를 유지할 수 있습니다. 아무리 작더라도.
예를 들어
0.054000
가 되거나 0.054
가 0.00000010000000
되거나 0.0000001
등이 됩니다.
자세한 내용은 Grymoires Awesome을 확인하세요.sed지도 시간.
답변4
grep을 사용하지 않는 이유는 무엇입니까?
echo "$your_number" | grep -o '.*[1-9]'