Bash脚本:指定bc输出数字格式

发布于 2024-09-03 20:37:57 字数 209 浏览 4 评论 0原文

我使用 在我的脚本中进行一些计算。例如:

bc
scale=6
1/2
.500000

为了在我的脚本中进一步使用,我需要“0.500000”而不是“.500000”。

您能帮我为我的案例配置 bc 输出数字格式吗?

I uses to make some calculations in my script. For example:

bc
scale=6
1/2
.500000

For further usage in my script I need "0.500000" instead of ".500000".

Could you help me please to configure bc output number format for my case?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

为人所爱 2024-09-10 20:37:57

一行:

printf "%0.6f\n" $(bc -q <<< scale=6\;1/2)

In one line:

printf "%0.6f\n" $(bc -q <<< scale=6\;1/2)
战皆罪 2024-09-10 20:37:57

只需在 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。

Just do all your calculations and output in awk:

float_scale=6
result=$(awk -v scale=$floatscale 'BEGIN { printf "%.*f\n", scale, 1/2 }')

As an alternative, if you'd prefer to use bc and not use AWK alone or with 'bc', Bash's printf supports floating point numbers even though the rest of Bash doesn't.

result=$(echo "scale=$float_scale; $*" | bc -q 2>/dev/null)
result=$(printf '%*.*f' 0 "$float_scale" "$result")

The second line above could instead be:

printf -v $result '%*.*f' 0 "$float_scale" "$result"

Which works kind of like sprintf would and doesn't create a subshell.

回忆凄美了谁 2024-09-10 20:37:57

快速而肮脏,因为 scale 仅适用于十进制数字,而 bc 似乎没有类似 sprintf 的函数:

$ bc
scale = 6
result = 1 / 2
if (0 <= result && result < 1) {
    print "0"
}
print result;

Quick and dirty, since scale only applies to the decimal digits and bc does not seem to have a sprintf-like function:

$ bc
scale = 6
result = 1 / 2
if (0 <= result && result < 1) {
    print "0"
}
print result;
耳钉梦 2024-09-10 20:37:57
echo "scale=3;12/7" | bc -q | sed 's/^\\./0./;s/0*$//;s/\\.$//'
echo "scale=3;12/7" | bc -q | sed 's/^\\./0./;s/0*$//;s/\\.$//'
失而复得 2024-09-10 20:37:57

我相信这是该函数的修改版本:

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
}

I believe here is modified version of the function:

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
}
我的黑色迷你裙 2024-09-10 20:37:57

你能把 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。

Can you put the bc usage into a little better context? What are you using the results of bc for?

Given the following in a file called some_math.bc

scale=6
output=1/2
print output

on the command line I can do the following to add a zero:

$ bc -q some_math.bc | awk '{printf "%08f\n", $0}'
0.500000

If I only needed the output string to have a zero for formatting purposes, I'd use awk.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文