如何使用具有整数结果的变量来划分浮点数?
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
如果您只需要结果的整数部分(适用于 bash
和 ksh
):
$ answer=$((length/1024))
$ echo $answer
2345964
如果你的长度变量是一个浮点数,你可以trim这样:
$ length=2402267538.12
$ ilength=${length%%.*}
$ answer=$((ilength/1024))
$ echo $answer
2345964
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
如果您只需要结果的整数部分(适用于 bash
和 ksh
):
$ answer=$((length/1024))
$ echo $answer
2345964
如果你的长度变量是一个浮点数,你可以trim这样:
$ length=2402267538.12
$ ilength=${length%%.*}
$ answer=$((ilength/1024))
$ echo $answer
2345964