3 votes

Comment supprimer le point flottant

J'ai une variable en tant que chaîne de caractères :

var="50.335"

J'essaie de la convertir en entier de cette manière :

var=$(printf "%.0f\n" "$((var))")

et l'affiche : echo $var Mais j'obtiens cette erreur :

erreur de syntaxe : opérateur arithmétique non valide (jeton d'erreur est ".335")

J'ai besoin qu'elle soit un entier pour pouvoir effectuer différentes opérations avec elle. Comment puis-je la convertir ?

6voto

fedorqui Points 9359

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X