我试图设计一个脚本,以欧元和美分给出任意的命令行输入,使用最小数量的音符或硬币计算变化。该脚本适用于没有小数点的数字, 例如:
[icapjser@if3tl0060 ]$ ksh my_script.sh 34212
68 500 euro note/s
1 200 euro note/s
1 10 euro note/s
1 2 euro coin/s
当我将带小数点的数字作为参数传递时,问题就开始了,我将首先解释一下我的代码是如何工作的,以便您可以更好地理解问题,首先我创建一个包含所有数组的数组笔记和硬币的不同值(500,200等等)然后我迭代该数组检查除法的结果(total_euros / note_or_coin_value)是否大于或等于1.如果是这样我使用模数得到剩余并保存我使用过的笔记/硬币数量。如果你不理解我的#34;那么这就是代码。解释技巧。
CANT=$1
RES=''
vals=(500 200 100 50 20 10 5 2 1 0,50 0,20 0,10 0,05 0,02 0,01)
flag=1
i=0
while [ $flag -eq 1 ]; do
n=$(expr $CANT / ${vals[$i]})
if [ $n -ge 1 ]; then # <- LINE 22
if [ ${vals[$i]} -gt 2 ]; then
RES=$RES' '$n' '${vals[$i]}' euro note/s\n'
else
RES=$RES' '$n' '${vals[$i]}' euro coin/s\n'
fi
CANT=$(expr $CANT % ${vals[$i]})
fi
if [ $CANT -eq 0 ]; then
flag=0
fi
i=$i+1
if [ $i -gt 14 ]; then
flag=0
fi
done
echo -e $RES
现在为什么它在没有小数点的情况下完美运行,但是当它们存在时它会这样做:
[icapjser@if3tl0060 ejercicios]$ ksh my_script.sh 3421,32
expr: non-numeric argument
my_script.sh[22]: [: argument expected
expr: non-numeric argument
my_script.sh[22]: [: argument expected
expr: non-numeric argument
my_script.sh[22]: [: argument expected
expr: non-numeric argument
my_script.sh[22]: [: argument expected
expr: non-numeric argument
my_script.sh[22]: [: argument expected
expr: non-numeric argument
my_script.sh[22]: [: argument expected
expr: non-numeric argument
my_script.sh[22]: [: argument expected
expr: non-numeric argument
my_script.sh[22]: [: argument expected
expr: non-numeric argument
my_script.sh[22]: [: argument expected
expr: non-numeric argument
my_script.sh[22]: [: argument expected
我希望你能理解这个问题,谢谢你的进步。 PS:如果有什么东西不清楚只是评论,我会更新! :P
答案 0 :(得分:3)
如果您想使用逗号,则需要设置LC_NUMERIC:
$ echo $LC_NUMERIC
$ echo $(( 1.5 * 2.5 ))
3.75
$ export LC_NUMERIC=it_IT
$ echo $(( 1.5 * 2.5 ))
ksh: 1.5 * 2.5 : arithmetic syntax error
$ echo $(( 1,5 * 2,5 ))
3,75
$ ksh --version
version sh (AT&T Research) 93u+ 2012-08-01
和expr无论如何都不能做浮点数学
$ expr 1.5 \* 2.5
expr: non-integer argument
$ expr 1,5 \* 2,5
expr: non-integer argument