如何使用具有整数结果的变量来划分浮点数?

How to divide floating point numbers using variables with integer result?

answer=$(echo $(( length / 1024 )) | bc -l)

所以 length 是一个变量,其值类似于 2402267538.,需要除以 1024

执行这个会抛出这个错误

")syntax error: invalid arithmetic operator (error token is " 

当你这样做时:

echo $(( length / 1024 )) | bc -l

您已经在 bc -l 之前丢失了小数点后的部分,因为 $(( length / 1024 )) 执行整数除法。

您可以这样使用 bc -l

length="2402267538"
answer=$(bc -l <<<"scale=2; $length / 1024")
echo "$answer"

2345964.39

使用 awk 更详细一点:

answer=$(awk -v len=$length 'BEGIN{printf "%.2f\n", len/1024}')
echo "$answer"

2345964.39

或者这样:

answer=$(awk -v len=$length 'BEGIN{printf "%d\n", len/1024}')
echo "$answer"

2345964

切换到 ksh 会简化任务:

$ length=2402267538

$ answer=$((length/1024.00))
$ echo $answer
2345964.392578125

awk 的一种方式:

$ answer=$(awk "BEGIN{printf(\"%f\n\",$length/1024);}")
$ echo $answer
2345964.392578

如果您只需要结果的整数部分(适用于 bashksh):

$ answer=$((length/1024))
$ echo $answer
2345964

如果你的长度变量是一个浮点数,你可以trim这样:

$ length=2402267538.12
$ ilength=${length%%.*}
$ answer=$((ilength/1024))
$ echo $answer
2345964