Vous faites printf "%.0f" "$(( 50.335 ))"
et $(( ))
n'accepte que des entiers.
Dites simplement:
$ var="50.335"
$ printf "%.0f\n" "$var"
50
De man bash
:
Expansion arithmétique
L'expansion arithmétique permet l'évaluation d'une expression arithmétique et la substitution du résultat. Le format pour l'expansion arithmétique est :
$((expression))
L'expression est traitée comme si elle était entre guillemets doubles, mais une guillemet double à l'intérieur des parenthèses n'est pas traitée spécialement. Tous les jetons dans l'expression subissent une expansion de paramètres et de variables, une substitution de commandes, et une suppression de guillemets. Le résultat est traité comme l'expression arithmétique à évaluer. Les expansions arithmétiques peuvent être imbriquées.
L'évaluation est effectuée selon les règles répertoriées ci-dessous sous ÉVALUATION ARITHMÉTIQUE. Si l'expression est invalide, bash affiche un message indiquant l'échec et aucune substitution ne se produit.
Et ensuite:
ÉVALUATION ARITHMÉTIQUE
Le shell permet l'évaluation des expressions arithmétiques, dans certaines circonstances (...). L'évaluation est faite en entiers de largeur fixe sans vérification de débordement, bien que la division par 0 soit capturée et signalée comme une erreur.
Notez que vous pouvez également utiliser l'expansion de paramètres Shell pour supprimer tout à partir du point .
:
$ var="50.335"
$ echo ${var%\.*}
50