과학적 표기법으로 적분을 표시하시겠습니까?

과학적 표기법으로 적분을 표시하시겠습니까?

포인트 값이 있습니다.

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
2400000

이를 쉘 변수에 할당합니다.

CPU_FREQ=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)

bash를 사용하여 쉘 스크립트에서 과학적 형식으로 표시하고 싶습니다. 게다가 이를 프로그램의 매개변수로 사용해야 합니다. 이것이 내가 원하는거야:

echo $CPU_FREQ
2.4+1e9

온라인에는 몇 가지 인기 있는 것들이 있지만 저는 보통 C/C++/Objective C를 사용하여 작업하기 때문에 이를 수정하는 방법이 명확하지 않습니다. 예를 들어 다음을 참조하세요.bash는 과학적 표기법으로 적분을 표시합니다.그리고과학적 표기법 bash 스크립트 제거.

적분을 과학적 표기법으로 변환하는 방법이 있나요?

아니면 과학적 표기법으로 숫자 값을 표시하는 방법은 무엇입니까?

답변1

이는 간단해야 합니다.

printf "%g" $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)

또는 Perl을 사용하십시오.

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq | perl -e 'printf("%g\n", <>)'

요청하신 형식이 조금 이상해 보이지만 이 두 예제에서는 과학적 표기법을 사용하여 숫자를 인쇄합니다.

답변2

실제로 @Jan이 언급했듯이 %e와 함께 printf를 사용할 수 있습니다. @Will은 %g 옵션을 언급했지만 이것이 반드시 과학적인 표기법은 아닙니다(아래 참조).

이는 여러분이 이미 알고 있는 C의 printf를 기반으로 합니다.

CPU_FREQ=$(printf "%e" $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq))

printf 명령은 다음과 같이 작동합니다.

var=1
printf "print a float variable %f, or an integer literal. %d" $var 2

%g, %e, %G 또는 %E를 사용할 수 있습니다. 또한 선택적 추가 리터럴 정수 매개변수 a,b도 사용할 수 있습니다(예: %a.bf).

즉, 선택적 매개변수 a는 최소 너비 크기입니다(출력이 변수로 전달되는 경우 이 매개변수는 무시됩니다).

%.be는 정확히 소수점 b 자리를 사용하여 인쇄하고 필요한 경우 패딩을 0으로 반올림합니다. %.bg는 뒤에 오는 0을 무시하고 b개의 유효 숫자로 결과를 인쇄합니다. (두 %f와 %e 중 더 짧은 것으로 생각할 수도 있지만 뒤에 0이 없다는 점에 다시 한 번 주목할 가치가 있습니다.)

예:

R=10000001
printf "%e\n"  $R
1.000000e+07
printf "%g\n" $R
1e+07

R=1.0000001 
printf "%e\n"  $R
1.000000e+00
printf "%g\n" $R
1

R=1000000.1    
printf "%e\n"  $R
1.000000e+06
printf "%g\n" $R
1e+06

R=.10000001
printf "%e\n"  $R
1.000000e-01
printf "%g\n" $R 
0.1

(%G 및 %E는 %g 및 %e와 같지만 대문자로 인쇄하며 이는 E가 되는 e에만 작동합니다.)

관련 정보