我有一个字符串变量:
var="50.335"
我尝试将其转换为 int,如下所示:
var=$(printf "%.0f\n" "$((var))")
并回显它:echo $var
但我收到此错误:
syntax error: invalid arithmetic operator (error token is ".335")
我需要它是一个整数,才能用它执行不同的运算。我该如何转换它?
答案1
您正在做的printf "%.0f" "$(( 50.335 ))"
并且$(( ))
只接受整数。
说啊:
$ var="50.335"
$ printf "%.0f\n" "$var"
50
从man bash
:
算术扩展
算术扩展允许计算算术表达式并替换结果。算术扩展的格式为:
$((expression))
表达式被视为在双引号内,但括号内的双引号不会被特殊处理。表达式中的所有标记都会经过参数和变量扩展、命令替换和引号删除。结果将被视为要评估的算术表达式。算术扩展可以嵌套。
求值按照下面算术求值中列出的规则进行。如果表达式无效,bash 将打印一条消息指示失败,并且不会发生替换。
进而:
算术评估
在某些情况下,shell 允许对算术表达式进行求值 (...)。评估以固定宽度的整数进行 不检查溢出,但除以 0 会被捕获并标记为错误。
注意您还可以使用Shell 参数扩展删除点处的所有内容.
:
$ var="50.335"
$ echo ${var%\.*}
50