Форматирование плавающей точки в printf ()

На *отклоняют, у Вас, вероятно, есть команда "whereis", которая ищет Ваш $PATH, ища двоичный файл с именем. Если 0$ не содержат имя полного пути, работание whereis $scriptname и сохранение результата в переменную должны сказать Вам, где сценарий расположен.

8
задан mdml 16 June 2014 в 18:59
поделиться

4 ответа

Используйте средство форматирования% g:

printf( "%g", 123.4000 );

печатает

123.4

Завершающие нули удаляются, но, к сожалению, также удаляется конечная десятичная точка, если дробная часть равна нулю. Я не знаю, есть ли на самом деле какой-либо способ сделать то, что вы хотите, напрямую с помощью printf () - я думаю, что что-то вроде этого, вероятно, ваш лучший выбор:

#include <stdio.h>
#include <math.h>

void print( FILE * f, double d ) {
    if ( d - floor(d) == 0.0 ) {
        fprintf( f, "%g.", d );
    }
    else {
        fprintf( f, "%g", d );
    }
}

int main() {
    print( stdout, 12.0 );
    print( stdout, 12.300 );
}
18
ответ дан 5 December 2019 в 07:58
поделиться

Не знаю, насколько это взломано, но:

http://codepad.org/e3Q3pUNd

float f = 124.000;
if (f == (int) f) {
    printf("%.1f\n", f); /* .1 can be changed */
} else {
    printf("%g\n", f);
}

Возвращает 124,0 .

float f = 124.123000;
if (f == (int) f) {
    printf("%.1f\n", f); /* .1 can be changed */
} else {
    printf("%g\n", f);
}

Возвращает 124,123 .

3
ответ дан 5 December 2019 в 07:58
поделиться

Print to a (large enough) buffer. Print the buffer ... and if the there's no '.' in the buffer print a dot.

char buf[100];
sprintf(buf, "%g", val);
printf("%s", buf);
if (strchr(buf, '.') == NULL) putchar('.');

edit

The Standard specifies the # flag:

# The result is converted to an ``alternative form''. [...] For a, A, e, E, f, F, g, and G conversions, the result of converting a floating-point number always contains a decimal-point character, even if no digits follow it. [...] For g and G conversions, trailing zeros are not removed from the result. [...]

... but you get the trailing zeros :(

0
ответ дан 5 December 2019 в 07:58
поделиться

Используйте% g -

Выведите двойное число в нормальном или экспоненциальном представлении, в зависимости от того, что больше подходит для его величины. 'g' использует буквы нижнего регистра, 'G' использует буквы верхнего регистра. Этот тип немного отличается от записи с фиксированной точкой тем, что незначащие нули справа от десятичной точки не включаются. Кроме того, десятичная точка не включается в целые числа.

0
ответ дан 5 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: