What is %.2f? Why is it not just %f? Is there some additional calculation happening? The half function already does all the calculations including splitting the bill, so I’m not sure what %.2f is. (Btw why is this code not formatting correctly in lemmy?)
#include
#include
float half(float bill, float tax, int tip);
int main(void)
{
float bill_amount = get_float("Bill before tax and tip: ");
float tax_percent = get_float("Sale Tax Percent: ");
int tip_percent = get_int("Tip percent: ");
printf("You will owe $%.2f each!\n", half(bill_amount, tax_percent, tip_percent));
}
// TODO: Complete the function
float half(float bill, float tax, int tip)
{
bill += (bill * (tax / 100.0));
bill += (bill * (tip / 100.0));
bill /= 2;
return bill;
}
Please put your code between tripple backticks in a seperate line above an below your code. Single backticks are only for
inline code
like this.To answer your question, the
.2f
means it should only print two digits after the decimal point.You can also use some other variations like this:
%2f
print the number at least 2 characters wide%5.2
print the number at least 5 characters wide with a precision of two digits after the decimal point%05.2
the same as above, but fill leading digits with zeros
This is just formatting, play a bit around with it and you will get it.
It’s a decimal floating point specifier with a precision sub-specifier.
Example with pi.
#define PI 3.1415926 int main() { printf("%.2f", PI); // prints 3.14 return 0; }
.2f%
means it will format to two decimal places max. So 5.877 will format as 5.88 and 1 will format as 1.00.This formats the number with 2 decimals behind the dot.
If you want multi-line code, you need to put it like this:
For these kinds of questions, your best friend is the documentation. In particular, a
man 'printf(3)'
yields:Format of the format string
The format string is a character string, beginning and ending in its initial shift state, if any. The format string is composed of zero or more directives: ordinary characters (not %), which are copied unchanged to the output stream; and conversion specifications, each of which results in fetching zero or more subsequent arguments. Each conversion specification is introduced by the character %, and ends with a conversion specifier. In between there may be (in this order) zero or more flags, an optional minimum field width, an optional precision and an optional length modifier.
The overall syntax of a conversion specification is:
%[$][flags][width][.precision][length modifier]conversion
Wait, you can use
man
on C functions?On libc functions yes. Maybe on some from other libs, if they provide man pages.
That’s nice.
Yup! Try also
man malloc
😁Nice :)
You can if you have those man pages installed.
You might also enjoy
man ascii
,man operator
, or evenman intro
.Unfortunately, there are still some gaps:
$ man love No manual entry for love
Back in my day, MS-DOS let you use
HELP
on QBASIC commands.
Wouldn’t
man 3 printf
do the same thing without the quotes?
This is the kind of thing that writing a unit test or a simple console app to try it yourself would be a lot more educational than posting a question online.
And much faster.
.2f
will format your number rounded to two decimal places. So if you had 1 / 3 it would come out as 0.33 instead of 0.333333% is the placeholder for the value
.2 tells it ‘two spaces after the decimal’
f tells it that the placeholder is a float
The .2f just means the float displays with only 2 significant figures ie cents.