使用Bash进行浮点运算

11

如何在 Bash 脚本中将字符串 "620/100" 转换成 "6.2"?

我的问题背景是图像处理方面。EXIF 数据使用分数格式编码焦距,而我需要相应的十进制字符串。

谢谢您的帮助,Olivier

4个回答

23

使用bc -l

bc -l <<< "scale=2; 620/100"
6.20

或者awk:

awk 'BEGIN{printf "%.2f\n", (620/100)}'
6.20

6

bash 不支持浮点数。

你可以使用 bc

$ echo "50/10" | bc -l
5.00000000000000000000
$ echo "scale=1; 50/10" | bc -l
5.0

3

感谢你的回答。bc正是我所需要的。

我不知道发布结果是否有用。无论如何,这是提取照片焦距并以十进制格式打印的最终代码。它应该适用于所有相机。已在三个不同品牌的四台相机上进行了测试。

F="your_image.JPG"
EXIF=$(exiv2 -p v "$F")
FocalFractional=$( echo "$EXIF" | grep -E '[^ ]*  *Photo *FocalLength '| grep -iohE "[^ ]* *$" )
Formula="scale=2; "$FocalFractional
FocalDecimal=$( bc -l <<< "$Formula" )
echo $ FocalDecimal

1

bc -l <<< 100/3 对我非常有帮助。非常感谢。 但是,如果有人需要使用变量执行十进制算术,并且结果必须保存在新变量中,请尝试以下语法: answer=$(bc -l <<< $num_1*$num_2)


请不要将“谢谢”作为答案。一旦您拥有足够的声望,就可以投票支持有帮助的问题和答案。- 来自审核 - mana
这种类型的评论最好作为对你所回应的问题或答案的评论,而不是作为一个答案本身。 - sloppypasta
这种类型的评论最好作为对你回应的问题或答案的评论,而不是作为一个答案本身。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接