-1

私のスクリプト

 echo -n "number 1 : ";
 read bil1
 echo -n "number 2 :";
 read bil2
 jlh=$(echo $bil1 + $bil2 |bc -l |sed -e 's/^\./0./' -e 's/^-\./-0' -e 's/\.0*$//');
 printf "Your result : %d + %d = %'d\n" $bil1 $bil2 $jlh

$bil1 に「0.1」、 $bil2 に「0.4」と入力すると、結果は次のようになります。

line 24: printf: 0.1: invalid number
line 24: printf: 0.4: invalid number
line 24: printf: 0.5: invalid number
Your result : 0 + 0 = 0

が欲しいです :

Your result : 0.1 + 0.4 = 0.5

その結果を私のbashに表示する方法??

4

3 に答える 3

3

%d整数用のフォーマットを使用しています。%ffloat の正しい形式です。sprintf-- format-code の完全なリファレンスについては、のマンページを参照してください。%'.1fここであなたが望むものかもしれません(それを指摘してくれたエイドリアンに感謝します!)

この の誤った使用は、%d実際に printf が失敗する原因にはなりません。経験したように、数値が切り捨てられるだけです (例: 0.4 -> 0)。

マイナーな問題もあります: 2 番目のsed式にターミネータがありません (末尾に がありません/) 。

于 2013-05-20T11:11:59.887 に答える
0

式を使用

jlh=expr $bil1 + $bil2は $bil1 + $bil2 を計算し、変数 jlh を同じ値に設定します

printf "結果: %d + %d = %d\n" $bil1 $bil2 $jlh

必要に応じて結果を出力します

浮動小数点数を扱うには、bc を使用する必要があり ます。http://www.linuxjournal.com/content/floating-point-math-bashで詳しく説明されています。

于 2013-05-20T11:03:27.657 に答える
0

たとえば、bc を使用する必要があります。bash は浮動小数点数をサポートしていないため、式を bc にパイプし、bc の出力を使用して印刷できます。

簡単にするために、printf よりも echo を選択しました

#!/bin/bash

 echo -n "number 1 : ";
 read bil1
 echo -n "number 2 :";
 read bil2

 echo "$bil1 + $bil2 = $( echo "$bil1 + $bil2" | bc)"

$( echo "$bil1 + $bil2" | bc)マジックは、ここで必要な式をパイプ処理し、bcbc の出力をその行の先頭にあるエコー出力で使用する部分で発生します。

number 1 : 0.1
number 2 :0.4
0.1 + 0.4 = .5

私のシステムでは、他の人が指摘したように、bcをインストールする必要があります(もちろんインストールされていない場合)

于 2013-05-20T13:59:19.747 に答える