【问题标题】:How to get integer part of floating point number?如何获得浮点数的整数部分?
【发布时间】:2018-03-09 03:03:58
【问题描述】:

这是我的代码:

float = 10.23444566
awk {printf("%.0f\n", $float)}

我得到的答案是 0。

我只想从中得到值 10。

我正在使用 awk 命令。

【问题讨论】:

标签: linux shell floating-point integer


【解决方案1】:

我相信这是 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
>

【讨论】:

  • 这应该是正确的答案。请注意,如果浮点数 > 0.5,awk '{printf "%.0f\n", $1}' 命令将执行向上取整,并且不会返回整数部分,而是返回四舍五入的数字;向上或向下。
【解决方案2】:

试试这个。

float=10.23444566;
printf "%.0f" $float;

在 shell 脚本中,您用于 printf 命令的语法是错误的。您不能像 c 函数那样调用它。

有关详细信息,请参阅手册页。

man printf

 

编辑

如果你想使用awk 命令,你需要将float 值通过管道传递给命令。请参阅下面的代码。

float=10.23444566;
echo $float | awk  '{printf "%.0f\n", $1}';

【讨论】:

  • 是的,我知道。但我在这里使用 awk,所以我可以在 awk 命令中使用 printf
  • 考虑在问题中也包含这些细节。
  • @Aakashk.u。根据您问题的变化,使用更多详细信息编辑答案。
【解决方案3】:

嗯,(Posix-)Shell 没有浮点数,当我们谈论浮点数时,谈论尾数和指数是有意义的,不清楚您所说的“整数”部分是什么意思。

此外,您分配给变量 float 的语句在语法上是错误的,因此此时您已经收到一条错误消息。

如果您有一个字符串,它可能看起来不像一个浮点数,但至少像一个小数(就像在您的示例中一样),并且您想提取小数点左侧的部分,这就是像这样:

float=10.45671
int_part=${float%.*}

你需要考虑一下情况,你有一个负数,或者你真的有一个看起来像一般浮点数的东西,即12.157E+03

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多