bash中的百分比精度
下面是我的bash脚本中的罪魁祸首代码行:bash中的百分比精度,bash,precision,Bash,Precision,下面是我的bash脚本中的罪魁祸首代码行: bat_percent=`echo "$bat_percent * 100" | bc | sed 's/.00//'` 当bat_%本应发出100时,则发出0.00 如果我将其更改为:(删除a.并添加0) 甚至:(30和a。) 输出为100.00 我怎么能让它说100,而保持其他的百分比,比如说87或5 我将随时回答任何后续问题:) 死后检验 这是完成的代码,感谢大家的帮助!(还有:别再互相投票了!让我们做朋友吧,梅凯?) 此代码获取电池的当前状态
bat_percent=`echo "$bat_percent * 100" | bc | sed 's/.00//'`
当bat_%本应发出100时,则发出0.00
如果我将其更改为:(删除a.并添加0)
甚至:(30和a。)
输出为100.00
我怎么能让它说100,而保持其他的百分比,比如说87或5
我将随时回答任何后续问题:)
死后检验
这是完成的代码,感谢大家的帮助!(还有:别再互相投票了!让我们做朋友吧,梅凯?)
此代码获取电池的当前状态并通知您:)尝试以下操作:
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=$(bc试试这个:
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=$(bc当您使用sed's/.00/'
时,它基本上意味着匹配任何字符(意思是
),后跟00
,并将其替换为零。因此,当您的输出中有100.00
时,sed
会适当地从中删除100
,并为您提供.00
你真正需要的是用\
..sed's/\..*/'
当您使用sed's/.00/'
时,它基本上意味着匹配任何字符(意思是
)然后是00
并将其替换为零。因此,当您的输出中有100.00
时,sed
会及时从中删除100
,并为您提供.00
你真正需要的是用\
..sed's/\..*/'
可能是这样的
$ bat_percent=.999
$ awk "BEGIN{printf \"%d\",$bat_percent*100}"
99
也许这个
$ bat_percent=.999
$ awk "BEGIN{printf \"%d\",$bat_percent*100}"
99
你的问题让我有点困惑。$bat_percent
的初始值是多少?$bat_percent是一个系统调用,用于获取笔记本电脑电池剩余的电池寿命百分比。它会不断变化。但该初始值与我的问题无关,因为我只是尝试格式化输出。对。我想这是你想要的当$bat_percent
已经是100
?或者什么的时候,你应该为$bat_percent
提供一些示例值。另外,你为什么要恢复我的编辑?我认为这是有建设性的,让事情变得更清晰。老实说,我已经把你的问题读了4遍,我仍然不能100%确定你在说什么我确实提供了一些,事实上。我所要问的是很简单的:代码的最后一位通常可以用99这样的数字来表示,但一旦变成100,它就会显示为.00,我想这是从代码的最后一位开始的。所以,正如问题中所解释的,我试着把它改为000,然后我得到100.00…这是最好的呃,但我不希望最后是.00。当它是100时,它应该是100。当它是99时,它应该是99。当它是1时,它应该是1。当它是0时,理论上应该是0,但计算机会死机;)你的问题让我有点困惑。$bat_percent
的初始值是多少?$bat_percent是一个系统调用,用于获取笔记本电脑电池剩余的电池寿命百分比。它会不断变化。但该初始值与我的问题无关,因为我只是尝试格式化输出。对。我想这是你想要的当$bat_percent
已经是100
?或者什么的时候,你应该为$bat_percent
提供一些示例值。另外,你为什么要恢复我的编辑?我认为这是有建设性的,让事情变得更清晰。老实说,我已经把你的问题读了4遍,我仍然不能100%确定你在说什么我确实提供了一些,事实上。我所要问的是很简单的:代码的最后一位通常可以用99这样的数字来表示,但一旦变成100,它就会显示为.00,我想这是从代码的最后一位开始的。所以,正如问题中所解释的,我试着把它改为000,然后我得到100.00…这是最好的呃,但我不希望最后是.00。当它是100时,它应该是100。当它是99时,它应该是99。当它是1时,它应该是1。当它是0时,理论上应该是0,但计算机会死机;)这正是我需要的,你的解释是正确的。感谢您的准确、简洁和切中要害。我真的很感谢你的时间@非常欢迎你。很高兴我能帮上忙。这正是我需要的,你的解释很到位。感谢您的准确、简洁和切中要害。我真的很感谢你的时间@非常欢迎你。很高兴我能帮上忙。我试过你的解决方案,以及我选择的答案,你的答案也同样有效!为了与其他几行不返回小数的代码保持一致,我决定接受另一个答案。不过,非常感谢。我从你的解释中学到了很多,这很有帮助@乔多:我的荣幸。如果——并且只有当——你认为其他人可能
$ bat_percent=1.000
$ awk "BEGIN{printf \"%d\",$bat_percent*100}"
100