-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格式,这是整数。%f是浮点数的正确格式。sprintf--有关格式代码的完整参考,请参见手册页。%'.1f可能是你想要的(感谢阿德里安指出这一点!)

正如您所经历的那样,这种错误使用%d实际上不会导致 printf 失败,只会截断数字(例如 0.4 -> 0)。

还有一个小问题:第二个sed表达式缺少终止符(没有尾随/

于 2013-05-20T11:11:59.887 回答
0

例如,您应该使用 bc。您可以通过管道将表达式传递给 bc 并使用 bc 的输出进行打印,因为 bash 不支持浮点数。

为了简单起见,我选择了 echo 而不是 printf

#!/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)此处的部分,我们通过管道传递您想要的表达式,bc并在该行开头的 echo 输出中使用 bc 的输出,该输出:

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

在我的系统上,但正如其他人所指出的,你应该安装 bc (如果没有安装当然)

于 2013-05-20T13:59:19.747 回答
0

使用 expr

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 回答