【发布时间】:2018-03-09 03:03:58
【问题描述】:
这是我的代码:
float = 10.23444566
awk {printf("%.0f\n", $float)}
我得到的答案是 0。
我只想从中得到值 10。
我正在使用 awk 命令。
【问题讨论】:
标签: linux shell floating-point integer
这是我的代码:
float = 10.23444566
awk {printf("%.0f\n", $float)}
我得到的答案是 0。
我只想从中得到值 10。
我正在使用 awk 命令。
【问题讨论】:
标签: linux shell floating-point integer
我相信这是 OP 正在寻找的答案:
> float=10.23444556; echo $float | awk '{ printf "%d\n",$1 }'
10
>
这是相似的:
> float=10.2344456; awk -v x="${float}" 'BEGIN{ printf "%d\n", x }'
10
>
【讨论】:
awk '{printf "%.0f\n", $1}' 命令将执行向上取整,并且不会返回整数部分,而是返回四舍五入的数字;向上或向下。
试试这个。
float=10.23444566;
printf "%.0f" $float;
在 shell 脚本中,您用于 printf 命令的语法是错误的。您不能像 c 函数那样调用它。
有关详细信息,请参阅手册页。
man printf
如果你想使用awk 命令,你需要将float 值通过管道传递给命令。请参阅下面的代码。
float=10.23444566;
echo $float | awk '{printf "%.0f\n", $1}';
【讨论】:
嗯,(Posix-)Shell 没有浮点数,当我们谈论浮点数时,谈论尾数和指数是有意义的,不清楚您所说的“整数”部分是什么意思。
此外,您分配给变量 float 的语句在语法上是错误的,因此此时您已经收到一条错误消息。
如果您有一个字符串,它可能看起来不像一个浮点数,但至少像一个小数(就像在您的示例中一样),并且您想提取小数点左侧的部分,这就是像这样:
float=10.45671
int_part=${float%.*}
你需要考虑一下情况,你有一个负数,或者你真的有一个看起来像一般浮点数的东西,即12.157E+03。
【讨论】: