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