0) { if (x%1>0) return x+(1-(x%1)) else re-6ren">
gpt4 book ai didi

bash bcmath 函数

转载 作者:行者123 更新时间:2023-11-29 09:49:36 33 4
gpt4 key购买 nike

我在 Bash 脚本中有两个 GNU bc 函数。

BC_CEIL="define ceil(x) { if (x>0) { if (x%1>0) return x+(1-(x%1)) else return x } else return -1*floor(-1*x) }\n"
BC_FLOOR="define floor(x) { if (x>0) return x-(x%1) else return -1*ceil(-1*x) }\n"
echo -e "scale=2"$BC_CEIL$BC_FLOOR"ceil(2.5)" | bc

这两个函数在交互式 bc 中都可以正常工作。 bc 似乎不允许在由 ; 分隔的一行上使用多个函数不过,所以我必须 echo -n | bc 在每个函数的末尾都有换行符。上面的输出是 2.5,而不是我自己输入 bc -i 得到的预期 3.0。似乎 bash 为每一行 echo 输出调用 bc,而不是将其全部回显到单个实例。有什么解决方法吗?

最佳答案

比例需要为零才能使 x%1 起作用。通常一个函数应该只有一个返回值。

define ceil(x) { auto savescale; savescale = scale; scale = 0; if (x>0) { if (x%1>0) result = x+(1-(x%1)) else result = x } else result = -1*floor(-1*x);  scale = savescale; return result }
define floor(x) { auto savescale; savescale = scale; scale = 0; if (x>0) result = x-(x%1) else result = -1*ceil(-1*x); scale = savescale; return result }

这需要在比例语句后换行:

echo -e "scale=2\n"$BC_CEIL$BC_FLOOR"ceil(2.5)" | bc

关于bash bcmath 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2726896/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com