0

私のbashスクリプトは

read -p "num 1: " num1
read -p "num 2: " num2
tmbk=$(echo $num1 + $num2 | bc | sed '
    s/^\./0./     # .2 -> 0.2
    s/^-\./-0./   # -.2 -> -0.2
    s/\.0*$//     # 2.000 -> 2
');
printf "result : %'d\n" $tmbk

printf "%'d\n"3 つのゼロをポイントで区切るのに使用します。文字列を使用printf "%s\n"する場合、このコマンドは 3 つのゼロをポイントで区切りません。

私の質問: 0.1 innum1と 0.1 inを入力するとnum2、結果がこのようになるのはなぜですか?

printf : 0.2: invalid number
result : 0

私は自分のbashスクリプトを印刷したいのですが、result: 0.2そうではありませんinvalid number

4

4 に答える 4

4

%dは整数用です。%f代わりに試してください。

于 2013-05-29T16:24:20.800 に答える
1

このようにどうですか?

echo "num 1 :"
read num1
echo "num 2 :"
read num2
awk -v a="$num1" -v b="$num2" 'BEGIN{print "result:" a+b}';

出力に特定の形式が必要な場合はprintf、awkで使用できます

于 2013-05-29T16:23:58.143 に答える
0

だからあなたは「。」を見たいです。千の区切り記号としてだけでなく、小数点としても使用できますか? 1.234 が浮動小数点数か整数かを判断できないため、悪い考えです。

そのようなことを処理するためのロケールがあります (これらのロケールをインストールする必要があります)。

for loc in C en_US de_DE de_CH; do 
    LC_NUMERIC=$loc
    printf "%'d\t%'f\t%s\n" 1234 1234 $loc
done

結果:

1234    1234.000000     C
1,234   1,234.000000    en_US
1.234   1.234,000000    de_DE
1'234   1'234.000000    de_CH

ご覧のとおり、これらのロケールのいずれも、桁区切り記号と小数点として同じ文字を使用しておらず、それで問題ありません。

適切なロケールを選択したら、Kent に同意することしかできません。bc のフォーマットが気に入らない場合は、bc よりも awk の方が適しています。

于 2013-06-02T21:49:42.893 に答える
0

あなたの要件は少し奇妙です「区切られたポイントを持つ整数( 1.000.000 )」、何に取り組んできましたか??

また、行に小さな追加を行います..... echo "scale=4; $num1 + $num2" | 紀元前

「無効な数値出力」の場合 :: bash の printf は、 libc ライブラリの一部として、 C の printf() 関数で使用できるのと同じフォーマットを使用します....したがって

%d , %i : stands for integers 
%g , %f : stands for floating point ... likewise ,

これは、 printf() が ac - program で使用するのと同じ検証を使用するため、次のように、整数を期待する float に遭遇すると、「無効な数値」というコメントが付けられます。

 Kaizen ~
  $ printf "result : %'d\n" 2.3
   -bash: printf: 2.3: invalid number
  result : 2

Kaizen ~
 $ printf "result : %'li\n" 2.3
  -bash: printf: 2.3: invalid number
 result : 2

@ignacio の提案に同意するので、浮動小数点値を使用して印刷する場合は、コードに %g または %f を配置する必要があります。以下は、コード内のすべてのシナリオで正常に機能するはずです。

Kaizen ~
 $ printf "result : %'f\n" 2.3
result : 2.300000

Kaizen ~
 $ printf "result : %'g\n" 2.3
result : 2.3
于 2013-06-03T03:29:54.327 に答える