【发布时间】:2016-04-24 10:41:44
【问题描述】:
您好!
我使用 bс 在我的脚本中进行一些计算。例如:
bc
scale=6
1/2
.500000
为了在我的脚本中进一步使用,我需要将“0.500000”替换为“.500000”。
您能帮我为我的案例配置 bc 输出数字格式吗?
【问题讨论】:
您好!
我使用 bс 在我的脚本中进行一些计算。例如:
bc
scale=6
1/2
.500000
为了在我的脚本中进一步使用,我需要将“0.500000”替换为“.500000”。
您能帮我为我的案例配置 bc 输出数字格式吗?
【问题讨论】:
一行:
printf "%0.6f\n" $(bc -q <<< scale=6\;1/2)
【讨论】:
只需在 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,也不会创建子shell。
【讨论】:
又快又脏,因为scale 只适用于十进制数字,而bc 似乎没有类似sprintf 的功能:
$ bc
scale = 6
result = 1 / 2
if (0 <= result && result < 1) {
print "0"
}
print result;
【讨论】:
echo "scale=3;12/7" | bc -q | sed 's/^\\./0./;s/0*$//;s/\\.$//'
【讨论】:
我相信这里是函数的修改版本:
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
}
【讨论】:
你能把 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。
【讨论】: