我想模拟一台自动售货机,只有在里面扔2欧元才可以买东西。
只要我输入整数值,它就可以工作,但是如果我输入一个字符或浮点数,它会突然停止工作。并抛出一个错误,预期有一个整数表达式。
ang.directive("directive", function() {
return {
controller: "{{controller}}",
link: function (scope, elem, attrs) {
$scope.controller = "[CONTROLLER NAME]"
}
}
});
答案 0 :(得分:2)
-ne
仅执行整数比较,因此$x
必须扩展为shell识别为整数的内容。只需切换到!=
并比较为字符串。此外,由于bash
也无法添加浮点值,因此您需要使用bc
之类的内容来添加。
while [ "$x" != 2 ] ;
do
case $x in
0.5)
read -p "more money" z
x=$( bc <<< "$x + $z" )
;;
1)
read -p "more money" z
x=$( bc <<< "$x + $z" )
;;
1.5)
read -p "more money" z
x=$( bc <<< "$x + $z" )
;;
"R")
echo "return x"
x=0
;;
?)
echo "enter something else!"
x=0
;;
esac
done
答案 1 :(得分:0)
一种方法是使用正则表达式,如下所示:
re='^[0-9]+$'
if ! [[ $yournumber =~ $re ]] ; then
echo "error: Not a number" >&2; exit 1
fi
答案 2 :(得分:0)
Bash只能用整数算术,如stated in the manual。
要进行浮点运算,您需要做一些像管道bc
这样的事情:
$ x=1.0; z=0.5
$ bc <<< "$x + $z"
1.5
比较工作,有点,你需要读取输出以获得真值:
$ bc <<< "$x < 1.5"
1
其他选择是将浮点数转换为另一个内部表示,例如计算美分而不是全部美元/欧元。 或者将脚本转换为类似zsh,awk或Perl的东西,它们可以处理浮点数。
这是一个基于分数计算的草图:
#!/bin/bash
total=0
getcoin() {
read -p "Insert coin: " x
case $x in
0.1) cents=10 ;;
0.2) cents=20 ;;
0.5) cents=50 ;;
1|1.0) cents=100 ;;
2|2.0) cents=200 ;;
*) echo "Invalid coin!"; return 0;;
esac
(( total = total + cents))
return 0;
}
while getcoin && [[ $total -lt 200 ]] ; do
printf "You have %d cents\n" "$total"
done
printf "You got %d.%02d € in total\n" $((total / 100)) $((total % 100))