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 我将随时回答任何后续问题:) 死后检验 这是完成的代码,感谢大家的帮助!(还有:别再互相投票了!让我们做朋友吧,梅凯?) 此代码获取电池的当前状态

下面是我的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//'`
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