You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

for循环中使用declare -i定义数值变量丢失小数的问题咨询

Bash中保留小数变量的解决办法

问题根源

declare -i是Bash里专门定义整数变量的命令,只要用它声明的变量,赋值时会自动砍掉小数部分,只留整数。你代码里给B加了declare -i,所以哪怕awk算出了带小数的结果,存到B里也会被截断成整数,这就是为什么输出只有2。

修复代码

把B的declare -i去掉,直接用普通变量存awk的输出就行。A是文件行数,本身是整数,用declare -i没问题:

for file in *.tsv
do
  declare -i A=$(wc -l < "$file")
  echo "$A"
  B=$(awk -v A="$A" 'BEGIN {d=length(A); printf "%."d"f\n", A/1000000}')
  echo "$B"
done

补充说明

Bash本身对浮点运算支持很差,用awk来处理除法并保留小数是正确的思路,只要别把结果存到整数类型的变量里,就能完整保留小数部分。

内容的提问来源于stack exchange,提问作者JVGen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:52:52