用十进制数字运算时出现问题(KornShell)

胡安佩

我正在尝试设计一个脚本,该脚本以欧元和美分给出任意命令行输入,使用最小数量的纸币或硬币计算出零钱。该脚本可以很好地处理没有小数点的数字,例如:

[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。如果是,则使用模数获取余数并保存我使用过的纸币/硬币的数量。如果您不了解我的“惊人”解释技能,则可以使用以下代码。

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

格伦·杰克曼

如果要使用逗号,则需要设置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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

动态TextField和十进制数字的问题

来自分类Dev

NSJSONSerialization用小十进制数字

来自分类Dev

快速单击按钮时显示十进制数字

来自分类Dev

十进制数字逗号样式

来自分类Dev

Java舍入十进制数字

来自分类Dev

Android TextWatcher十进制数字

来自分类Dev

jQuery:动画十进制数字

来自分类Dev

设置十进制数字格式

来自分类Dev

JavaScript舍入十进制数字

来自分类Dev

如何对QLineEdit中键入的小十进制数字进行乘法运算?

来自分类Dev

如何在格式化十进制数字时保持尾随零?

来自分类Dev

使用python将十六进制十进制数字转换为十进制

来自分类Dev

难以删除十进制数字中的零值?

来自分类Dev

Java大十进制数字格式异常

来自分类Dev

从字符串中提取十进制数字

来自分类Dev

将十进制数字转换为ASCII

来自分类Dev

如何使用HSSFFont以十进制数字设置字体

来自分类Dev

Aspnet MVC 4验证十进制数字

来自分类Dev

使用十进制数字修复浮点精度

来自分类Dev

过滤字符串为十进制数字

来自分类Dev

大量的十进制数字到ASCII

来自分类Dev

如何插入Diesel的PgNumeric类型的十进制数字?

来自分类Dev

如何替换零并放入十进制数字?

来自分类Dev

用于分解30个十进制数字的算法

来自分类Dev

Javascript-十进制数字掩码

来自分类Dev

如何计算整数的十进制数字?

来自分类Dev

将货币转换为十进制数字JavaScript

来自分类Dev

取N位十进制数字

来自分类Dev

ValidationError:“值必须为十进制数字”