bcを10.00ではなく10として表示する方法

bcを10.00ではなく10として表示する方法
#!/bin/bash 
q=$(bc <<< "scale=2;$p*100")
head -n$q numbers.txt > secondcoordinate.txt

これはスクリプトの一部にすぎませんが、私の意図を説明するのに十分だと思います。pは小数点以下の2桁しかない変数なので整数でなければなりませんq...たとえば、代わりに表示されますbc10.0010

この問題をどのように解決できますか?

答え1

scale=0規模が決まる方法のため、明らかな内容ではこれを行うことはできません。

ドキュメントでは、1 で割るだけで出力を match にリセットするのに十分で、デフォルトはscale0 と間接的に説明します。

式1/式2式の結果は両方の式の商です。結果の尺度は変数尺度の値です。

p=12.34; echo "($p*100)" | bc
1234.00

p=12.34; echo "($p*100)/1" | bc
1234

bcあなたのバージョンがそれを処理できない場合は、sed代わりにパイプしてください。

p=12.34; echo "($p*100)" | bc | sed -E -e 's!(\.[0-9]*[1-9])0*$!\1!' -e 's!(\.0*)$!!'
1234

この RE ペアは、数値の小数部から末尾のゼロを削除します。したがって、3.00は3に減少し、3.10は3.1に減少しますが、300はそのまま残ります。

または最初に使用perlして廃棄します。bc

p=12.34; perl -e '$p = shift; print $p * 100, "\n"' "$p"

答え2

awk を使用して値を計算できます。

bash-3.2$ p=0.01
bash-3.2$ q=$(awk -vp_val="$p" 'BEGIN{print p_val*100}')
bash-3.2$ echo $q
1


bash-3.2$ p=0.02
bash-3.2$ q=$(awk -vp_val="$p" 'BEGIN{print p_val*100}')
bash-3.2$ echo $q
2


bash-3.2$ p=0.022
bash-3.2$ q=$(awk -vp_val="$p" 'BEGIN{print p_val*100}')
bash-3.2$ echo $q
2.2

答え3

長い話を短く

あなたには多くの選択肢があります。紀元前既知の動作がscale=0常に期待したものとは異なりますが、回避策はたくさんあります。以下はいくつかあります。

印刷機能

使用印刷機能出力を整数に制限します。

$ printf "%g\n" $(echo '12.34 * 100' | bc)
1234

BCと除算

持続したい場合紀元前サイズを変更するには、サイズを0に指定する必要があります。そしてスケールをリセットするには1で割ります。これは既知の動作ですが、実際に理由を説明することはできません。

$ echo '12.34 * 100 / 1' | scale=0 bc
1234

sed

不要な末尾の文字を削除します。

$ echo '12.34 * 100' | bc | sed 's/\.00$//'
1234

強く打つ

小数点の前の値を返すには、中かっこ拡張を使用します。

$ p='12.34'; q=$(bc <<< "scale=2; $p*100"); echo ${q%%.00}
1234

答え4

これは末尾のゼロを削除するbash関数です。

remove_trailing_zeroes()
{
    declare -n n="$1"
    # Prepend a 0 if number starts with a dot.
    if [[ $n =~ ^[.] ]]; then
        n="0$n"
    fi
    # Remove trailing zeroes
    while [[ $n =~ [.].*0$ ]]; do
        n="${n%0}"
    done
    # Remove trailing dot if any
    if [[ $n =~ [.]$ ]]; then
        n="${n%.}"
    fi
}

その後、次のようにあなたの場合に使用できます。

q=$(bc <<< "scale=2;$p*100")
remove_trailing_zeroes q
head -n$q numbers.txt > secondcoordinate.txt

関連情報