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 `.`).