Is it possible to format a float in C to only show up to 2 decimal places if different from 0s using printf?
Ex:
12 => 12
12.1 => 12.1
12.12 => 12.12
I tried using:
float f = 12; printf("%.2f", f)
but I get
12 => 12.00
12.1 => 12.10
12.12 => 12.12
print( '{:,g}'. format( X ) worked for me to output 3 where X = 6 / 2 and when X = 5 / 2 I got an output of 2.5 as expected. old question, but.. print("%s"%3.140) gives you what you want.
printf("%. 0f\n", my_float); This will tell printf to include 0 decimal places of precision (you can, of course, use other values as well).
According to most sources I've found, across multiple languages that use printf specifiers, the %g specifier is supposed to be equivalent to either %f or %e - whichever would produce shorter output for the provided value.
Get to the Format Cells dialog (e.g. by right-clicking a cell and selecting "Format Cells...") On the Number tab, select Number from the list of Categories. Set the Decimal Places box to 6. Hit Ok .
You can use the %g
format specifier:
#include <stdio.h> int main() { float f1 = 12; float f2 = 12.1; float f3 = 12.12; float f4 = 12.1234; printf("%g\n", f1); printf("%g\n", f2); printf("%g\n", f3); printf("%g\n", f4); return 0; }
Result:
12 12.1 12.12 12.1234
Note that, unlike the f
format specifier, if you specify a number before the g
it refers to the length of the entire number (not the number of decimal places as with f
).
From our discussion in the above answer here is my program that works for any number of digits before the decimal.
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { float f1 = 12.13; float f2 = 12.245; float f3 = 1242.145; float f4 = 1214.1; int i = 0; char *s1 = (char *)(malloc(sizeof(char) * 20)); char *s2 = (char *)(malloc(sizeof(char) * 20)); sprintf(s1, "%f", f1); s2 = strchr(s1, '.'); i = s2 - s1; printf("%.*g\n", (i+2), f1); sprintf(s1, "%f", f2); s2 = strchr(s1, '.'); i = s2 - s1; printf("%.*g\n", (i+2), f2); sprintf(s1, "%f", f3); s2 = strchr(s1, '.'); i = s2 - s1; printf("%.*g\n", (i+2), f3); sprintf(s1, "%f", f4); s2 = strchr(s1, '.'); i = s2 - s1; printf("%.*g\n", (i+2), f4); free(s1); free(s2); return 0; }
And here's the output
12.13 12.24 1242.15 1214.1
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With