百分比精度(以 bash 为单位)



这是我的bash脚本中的罪魁祸首代码行:

bat_percent=`echo "$bat_percent * 100" | bc | sed 's/.00//'`

当bat_percent本来会输出 100 时,它会输出 .00

如果我将其更改为:(删除 . 并添加 0)

bat_percent=`echo "$bat_percent * 100" | bc | sed 's/000//'`

甚至:(3 个 0 和 a .)

bat_percent=`echo "$bat_percent * 100" | bc | sed 's/000.//'`

输出为 100.00

我到底如何让它说 100,同时保持其他百分比,比如说,87 或 5?

我会在身边回答任何后续问题:)

后莫尔特姆

这是完成的代码,感谢你们所有人的帮助!(另外:停止互相投票!让我们做朋友吧,姆凯?

my_ac_adapt=`ioreg -w0 -l | grep ExternalConnected | awk '{print $5}'` 
cur_power=`ioreg -w0 -l | grep CurrentCapacity | awk '{print $5}'` 
max_power=`ioreg -w0 -l | grep MaxCapacity | awk '{print $5}'` 
bat_percent=`echo "scale=2;$cur_power / $max_power" | bc` 
bat_percent=`echo "$bat_percent * 100" | bc | sed 's/..*//'` 
if [ "$my_ac_adapt" == "Yes" -a "$bat_percent" == "100" ] 
then 
echo "Charged" 
elif [ "$my_ac_adapt" == "Yes" -a "$bat_percent" != "100" ] 
then 
echo "Charging: $bat_percent%" 
else 
echo "Battery: $bat_percent%" 
fi 

此代码获取电池的当前状态,并因此通知您:)

当你使用sed 's/.00//'时,它基本上意味着匹配任何字符(.的含义),后跟00并将其替换为任何字符。因此,当您的输出中有100.00时,sed适当地从中删除100并为您提供.00.

你真正需要的是用逃离特殊角色

... | sed 's/..*//'

试试这个:

bat_percent=`echo "$bat_percent * 100" | bc | sed 's/.00//'`

sed命令的问题在于,您没有转义. .将其用作文字;正则表达式中未转义的.匹配任何字符。

如果输入是 "100.00" ,则/.00/匹配100(因为.,由于匹配任何字符,匹配1),而不是.00

或者,如果您总是只想删除小数部分,请尝试以下操作:

bat_percent=$(bc <<<"$bat_percent * 100" | cut -d'.' -f 1)

也许这个

$ bat_percent=.999
$ awk "BEGIN{printf "%d",$bat_percent*100}"
99

$ bat_percent=1.000
$ awk "BEGIN{printf "%d",$bat_percent*100}"
100

相关内容

  • 没有找到相关文章

最新更新