I will get value like 2743410360.320 and I want value like 2743410360 to a variable.
I tried
INTValueOfGB=$ echo "($gb+0.5)/1" | bc
But I am getting (standard_in) 1: syntax error
I will get value like 2743410360.320 and I want value like 2743410360 to a variable.
I tried
INTValueOfGB=$ echo "($gb+0.5)/1" | bc
But I am getting (standard_in) 1: syntax error
You can use printf for rounding:
$ printf "%.0f" 2743410360.320
I don't see an answer to @vin's problem, which is:
But I am getting
(standard_in) 1: syntax error
The bc command prints (standard_in) 1: syntax error because the shell variable gb is not set:
$ unset gb
$ echo "($gb+0.5)/1" | bc
(standard_in) 1: syntax error
$ gb=2743410360.320
$ echo "($gb+0.5)/1" | bc
2743410360
In the comments to the @dchirikov's answer, @vin says printf "%.0f" is "not working":
$ unset gb
$ printf '%.0f\n' $gb
0
$ gb=2743410360.320
$ printf '%.0f\n' $gb
2743410360
In both of the areas where @vin has problems, the unset variable reproduces the problem, and setting the variable solves the problem.
$ p=2743410360.320
$ echo $p
2743410360.320
$ echo ${p%%.*}
2743410360
Your command needs a couple of ( ):
INTValueOfGB=$( echo "($gb+0.5)/1" | bc )
But that will not round the number, for that to work you need to set scale to 0:
INTValueOfGB=$( echo "scale=0;($gb+0.5)/1" | bc )
That will round up (from x.5) to the next integer.
To get "round to next even integer" (Banker's rule), you need to use printf rounding:
LC_NUMERIC=C printf "%.0f" 2743410360.320
The LC_NUMERIC is to ensure that numbers are processed with a dot as decimal.
That is not what users in Germany will like to use, this should work with decimals with ,:
$ LC_NUMERIC=de_DE.utf8 printf "%.0f" 2743410360,320
2743410360