You could do something like:
LC_ALL=C free -h | awk '
/^Mem/ {
suffix = $2
sub(/[0-9.]*/, "", suffix)
printf "%.0f%sB\n", $2, suffix
}'
(`LC_ALL=C` to make sure the numbers are printed using the `.` decimal radix (3.7G would be output as 3,7G in locales using comma as the decimal radix)).
On GNU/Linux systems, you can also do:
awk '/^MemTotal/{print $2*1024}' < /proc/meminfo |
numfmt --to=iec --format=%.0f --suffix=B
Or:
free -h | awk '/^Mem/{print $2}' |
numfmt --from=iec --to=iec --format=%.0f --suffix=B
(that one coping with locales where the decimal radix is not `.`).