我的剧本
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中显示结果??
答案 0 :(得分:3)
您正在使用%d
格式,这是针对整数的。 %f
是浮点数的正确格式。 - 有关格式代码的完整参考,请参阅sprintf
的手册页。 %'.1f
可能就是你想要的(感谢Adrian指出这一点!)
错误地使用%d
实际上不会导致printf失败,只会截断数字(例如0.4 - > 0),就像您所经历的那样。
还有一个小问题:第二个sed
表达式缺少终止符(没有尾随/
)
答案 1 :(得分: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
答案 2 :(得分:0)
你应该使用bc作为例子。您可以将表达式传递给bc并使用bc的输出进行打印,因为bash不支持浮点数。
为简单起见,我选择了回显printf
#!/bin/bash
echo -n "number 1 : ";
read bil1
echo -n "number 2 :";
read bil2
echo "$bil1 + $bil2 = $( echo "$bil1 + $bil2" | bc)"
magick发生在$( echo "$bil1 + $bil2" | bc)
部分,我们在这里管道你想要的表达式bc
并使用bc的输出在该行开头的echo输出中输出:
number 1 : 0.1
number 2 :0.4
0.1 + 0.4 = .5
在我的系统中,但正如其他人所说,你应该安装bc(如果没有安装的话)