当前位置: 首页 > 知识库问答 >
问题:

Bash中带浮点值的C风格算术[duplicate]

沃盛
2023-03-14

如何从bash脚本中获得正确的结果?

#!/bin/bash
echo $(( 1/2 ))

结果我得到0!因此,我尝试使用这些,但没有成功:

$ echo $(( 1/2.0 ))
bash: 1/2.0 : syntax error: invalid arithmetic operator (error token is ".0 ")
$ echo $(( 1.0/2 ))
bash: 1.0/2 : syntax error: invalid arithmetic operator (error token is ".0/2 ")

共有2个答案

鲁文昌
2023-03-14

有一次,我偶然发现了一段不错的代码,它在某种程度上利用了sputnick提出的建议,但它围绕着一个bash函数:

function float_eval()
{
    local stat=0
    local result=0.0
    if [[ $# -gt 0 ]]; then
        result=$(echo "scale=$float_scale; $*" | bc -q 2>/dev/null)
        stat=$?
        if [[ $stat -eq 0  &&  -z "$result" ]]; then stat=1; fi
    fi
    echo $result
    return $stat
}

然后,您可以将其用作:

c=$(float_eval "$a / $b")
章景同
2023-03-14

bash不是单独使用浮动的正确工具,您应该使用bc:

bc <<< "scale=2; 1/2"
.50

如果需要将结果存储在变量中:

res=$(bc <<< "scale=2; 1/2")
echo $res
 类似资料:
  • 如何在C中格式化一个浮点数以输出到四舍五入的两位小数?我在< code>setw和< code>setprecision上运气不好,因为我的编译器告诉我它们< code >未定义。

  • 对于这些代码行,我得到0作为输出,即它们都是相等的。现在,如果我理解正确,a b和c可能会存储稍微不同版本的真值.3因此,当做一个Float.compare(...)对这些值,我希望得到一个输出值,而不是0。为什么我把它们取为0?

  • 我试图在Bash脚本中划分两个图像宽度,但是Bash给了我,结果是: 我确实研究了Bash指南,我知道我应该使用,在互联网上的所有示例中,他们都使用。在中,我试图将同样的东西放入

  • 本文向大家介绍DSP中浮点转定点运算--浮点数的存储格式,包括了DSP中浮点转定点运算--浮点数的存储格式的使用技巧和注意事项,需要的朋友参考一下 二:浮点数的存储格式 2.1 IEEE floating point standard   上面我们说了,浮点数的小数点是不固定的,如果每个人都按照自己的爱好存储在电脑里,那不就乱套了吗?那么怎么在计算机中存储这种类型的数字呢?象这类古老的问题前人早都

  • 本文向大家介绍浅谈c# 浮点数计算,包括了浅谈c# 浮点数计算的使用技巧和注意事项,需要的朋友参考一下 给大家看个计算题,看看大家的算术能力。 0.1 +0.1 +0.1 - 0.3 等于几? 大家可能会说这么简单的问题,是不是看不起我?肯定等于0啊。 如果大家直接算的是没有问题的,但是如果用计算机呢? 见证奇迹的时刻到了,看代码: 运行结果: 这是因为计算机的精度的问题,在计算机的内部存储和运算

  • 有人能帮我处理bash中需要的计算吗? 目前我有以下几点: 但我在尝试执行时遇到以下错误: 我愿意使用其他替代品,比如打印、awk甚至bc,但我需要一些指导。