货币换算

时间:2013-02-14 16:12:56

标签: bash

我坚持这个美元到SEK货币转换器和空行,第12行。目前的转换是1 SEK = 0.158193 USD 1 USD = 6.32138 SEK。

第12行会有类似SEK =“(?(USD))?”

我不知道在问号中输入什么。

#!/bin/bash

shopt -s -o nounset
declare -i USD # USD
declare -i SEK # SEK
# Title
printf "%s\n" "USD-SEK Currency Convertor"
printf "\n"
# Get the value to convert
read -p "Enter a USD: " USD
# Do the conversion

printf "You will get SEK %d\n" "$SEK"
exit 0

1 个答案:

答案 0 :(得分:1)

您可以使用bc进行浮点运算,如下所示:

SEK=$( echo " 6.32138 * $USD " | bc -l )

<强> 说明:

Bash没有为浮点算法构建它。因此,我们通常使用bc程序处理这些操作。 bc从标准输入中读取算术表达式作为字符串,并将结果打印为标准输出。请注意,-l选项对于保留表达式的小数部分是必需的。

为了从bc获取结果并将其存储在变量中,我们使用命令重定向,即$( )。请注意,前一个表达式中=之前和之后没有空格。

完整示例

#!/bin/bash
printf "%s\n" "USD-SEK Currency Convertor"
# Get the value to convert
read -p "Enter a USD: " USD
SEK=$(echo " 6.32138 * $USD " | bc -l )
printf "You will get SEK %s\n" "$SEK"  ;#  NOTE THAT I CHANGED THIS TO %s FROM %f DUE TO THE LOCALE SETTINGS

<强> 输出

$ ./converter.sh 
USD-SEK Currency Convertor
Enter a USD: 10
You will get SEK 63.213800

请注意,我从脚本中删除了declare -i SEK,因为SEK变量是 NOT 整数

declare -i的危害。此代码生成:

#!/bin/bash
declare -i SEK     ;#    WOOOPS I FORGOT THE declare -i
printf "%s\n" "USD-SEK Currency Convertor"
# Get the value to convert
read -p "Enter a USD: " USD
SEK=$(echo " 6.32138 * $USD " | bc -l )
printf "You will get SEK %s\n" "$SEK"

此输出:

$ ./converter.sh 
USD-SEK Currency Convertor
Enter a USD: 10
./converter.sh: line 6: 63.21380: syntax error: invalid arithmetic operator (error token is ".21380")
You will get SEK 0.000000