我使用bс在我的脚本中进行一些计算。例如:
bc
scale=6
1/2
.500000
对于我的脚本中的进一步用法,我需要“0.500000”insted“.500000”。
你能帮我配置bc输出数字格式吗?
我使用bс在我的脚本中进行一些计算。例如:
bc
scale=6
1/2
.500000
对于我的脚本中的进一步用法,我需要“0.500000”insted“.500000”。
你能帮我配置bc输出数字格式吗?
快速和肮脏的,因为scale
仅适用于十进制数字和bc
似乎并不具有sprintf
般的功能:
$ bc
scale = 6
result = 1/2
if (0 <= result && result < 1) {
print "0"
}
print result;
你可以把BC使用到好一点的情况下?你使用bc的结果是什么?
由于在文件中的以下称为some_math.bc
scale=6
output=1/2
print output
在命令行上我可以做以下补充零:
$ bc -q some_math.bc | awk '{printf "%08f\n", $0}'
0.500000
如果我只需要输出字符串中有一个为了格式化目的,我使用awk。
我相信在这里被修改版本的函数:
float_scale=6
function float_eval()
{
local stat=0
local result=0.0
if [[ $# -gt 0 ]]; then
result=$(echo "scale=$float_scale; $*" | bc -q | awk '{printf "%f\n", $0}' 2>/dev/null)
stat=$?
if [[ $stat -eq 0 && -z "$result" ]]; then stat=1; fi
fi
echo $result
return $stat
}
这是答案吗? – 2010-06-03 14:42:23
只是做所有的计算和输出在AWK:
float_scale=6
result=$(awk -v scale=$floatscale 'BEGIN { printf "%.*f\n", scale, 1/2 }')
作为替代方案,如果你愿意使用bc
而不是单独使用AWK或与'bc'一起使用,Bash的printf
支持浮点数,即使Bash的其余部分都不支持。
result=$(echo "scale=$float_scale; $*" | bc -q 2>/dev/null)
result=$(printf '%*.*f' 0 "$float_scale" "$result")
上面的第二行可以替换为:
printf -v $result '%*.*f' 0 "$float_scale" "$result"
其中一期工程的有点像sprintf
会和不会创建一个子shell。
echo "scale=3;12/7" | bc -q | sed 's/^\\./0./;s/0*$//;s/\\.$//'
在一个行:
printf "%0.6f\n" $(bc -q <<< scale=6\;1/2)
+1此解决方案:无需使用其他工具,如AWK。 – 2010-06-04 04:20:15