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

处理Bash中的浮点数[重复]

狄飞尘
2023-03-14

有人能帮我处理bash中需要的计算吗?

目前我有以下几点:

Size=$((IPS * DataPages / (1024 * 1024 * 1024) * 1.05))

但我在尝试执行时遇到以下错误:

./buffer: line 20: IPS * DataPages / (1024 * 1024 * 1024) * 1.05: syntax error: invalid arithmetic operator (error token is ".05")

我愿意使用其他替代品,比如打印、awk甚至bc,但我需要一些指导。

共有2个答案

汝昀
2023-03-14

(( ))不支持浮点运算。使用bc或awk。

使用bc

Size=$( echo "scale=2; $IPS * $DataPages / (1024 * 1024 * 1024) * 1.05 " | bc ) 
# scale is for number of digits after the floating point

使用awk

Size=$( awk -v ips="$IPS" -v dp="$DataPages" 'BEGIN{size=ips * dp/ (1024 * 1024 * 1024) * 1.05; printf "%0.02f",size}' )
岳嘉悦
2023-03-14

bash不支持浮点运算。使用bc。要在bc中启用浮点运算,请传递--mathlib(或-l)选项:

IPS=2
DataPages=3
bc --mathlib <<< "($IPS * $DataPages / (1024 * 1024 * 1024) * 1.05)"

要将其捕获到shell变量中,请使用过程替换:

...
Size=$(bc --mathlib <<< "($IPS * $DataPages / (1024 * 1024 * 1024) * 1.05)")
 类似资料:
  • 问题内容: 我有以下虚拟测试脚本: 这将打印结果,而仅打印结果(如果使用计算器)。据我了解,这是由于浮点乘法精度的错误。 有没有人有一个好的解决方案,这样在这种情况下我可以获得正确的结果?我知道还有类似的函数,或者四舍五入是另一种可能性,但是我真的想在不进行任何四舍五入的情况下打印出完整的数字。只是想知道你们中的一个人是否有一些不错的,优雅的解决方案。 当然,否则我将四舍五入到大约10位数字。 问

  • 问题内容: 我对在Go中精确减去2个float的方法感兴趣。 我尝试使用该 库,但无法获得准确的结果。 我使用Javascript中的big.js库解决了此问题。Go算法是否有类似的库/方法? https://play.golang.org/p/vomAr87Xln 问题答案: 包装大 导入“数学/大” func(* Float)字符串 字符串格式x类似于x.Text(’g’,10)。(必须显式调

  • 我尝试了两件事: 和:

  • 问题内容: 我需要利用来自另一个系统的数字,这些数字是Java中的128位(四精度)浮点数。 考虑到Java中没有等效类型,我想使用Java代码降低数字的精度,以便将它们存储在Java double中。这可以在c或使用汇编中相当容易地完成,但是我想纯粹在java中完成。 可以假定四精度数存储在Java中的128位字节数组中。 是否有一个很好的解决方案,仅使用java?谢谢。 问题答案: 我对这个问

  • 论浮点数的存储原理:float浮点数与double浮点数的二进制存储原理–>阶码 浮点数转二进制 1.整数int类型和浮点数float类型都是占用4个字节,在计算机中有32位来进行表示,那为什么什么float的范围大于int? 答:因为两者的存储原理一样,虽然该同样是采用二进制的方式进行存储,但是整数类型(int)采用的是补码方式进行存储,但是浮点类型(float)采用的是阶码方式存储.由于阶码内

  • 我的程序应该接受一个浮点变量,然后退出。然而,我正在练习一些异常处理的东西,发现了一个问题。当您在这个程序中输入一个字母时,程序当然会抛出一个InputMismatchException,但它会陷入无限循环。我认为我的问题是基于我对try-catch语句和异常处理的误解。 如果我使用不同的变量类型,就不会出现这个问题,所以我不确定这是逻辑错误还是浮点变量的问题。